如何用c++判断一个类型是vector

如何用c++判断一个类型是vector

我们使用模板元编程来搞定

这里我们可以定义一个模板结构体 is_std_vector,并对其进行特化,以便专门处理 std::vector 类型。

.

下面是详细的实现和使用示例。

实现 is_std_vector 类型, 继承自false_type

首先,我们定义一个模板结构体 is_std_vector,并提供其特化版本用来处理 std::vector 类型。

cpp 复制代码
#include <type_traits>
#include <vector>

// 默认情况下,is_std_vector<T> 继承自 std::false_type
template <typename T> struct is_std_vector : false_type {};

// 特化版本,当 T 是 std::vector<T> 时,继承自 std::true_type
template<typename T> struct is_std_vector<vector<T>> : true_type {};

// 辅助变量模板,用于简化使用
template<typename T>
constexpr bool IS_VECTOR = is_std_vector<T>::value;

int main()
{
	vector<int> a = { 1, 2, 3 };
	if (IS_VECTOR<decltype(a)>)
		cout << "vector" << endl;
	else
		cout << "not vector" << endl;
	
	int b = 1;
	if (IS_VECTOR<decltype(b)>)
		cout << "vector" << endl;
	else
		cout<< "not vector" << endl;
	return 0;
}

执行结果

相关推荐
一行代码一行诗++12 小时前
预定义符号
开发语言·c++·算法
计算机安禾12 小时前
【c++面向对象编程】第50篇:从OOP到数据导向设计:现代C++的性能反思
开发语言·c++·spring
Unbelievabletobe12 小时前
外汇实时api的WebSocket心跳间隔设多少秒最稳定?
开发语言·网络·python·websocket·网络协议
Vect__12 小时前
C++转go之map、面向对象深度剖析
开发语言·c++·golang
林森lsjs12 小时前
【日耕一题】1. 图书类:声明图书类,记录图书总册数,利用静态变量赋值
java·开发语言
sycmancia12 小时前
Qt——查找对话框的功能实现
开发语言·qt
草莓熊Lotso12 小时前
LangChain 实战指南:聊天模型与工具调用全解析
linux·c++·python·langchain·软件工程·ai编程
布朗克16812 小时前
01 Java是什么?为什么学Java
java·开发语言
跨境数据猎手12 小时前
跨境电商系统开源PHP多语言架构拆解(下)
开发语言·架构·php
lly20240612 小时前
Perl 时间日期处理指南
开发语言