有没有办法判断模板参数是否是特定的基本数据类型,如int或unsigned int? std :: is_base_of没有这样做,试过了。我想编写可以包装所有基本数据类型的集合,但我找不到告诉它是哪种类型的方法......
答案 0 :(得分:3)
使用is_same。如果您没有实现(std或boost),请使用:
template < typename T1, typename T2 >
struct is_same { enum { value = false }; };
template < typename T >
struct is_same <T,T> { enum { value = true }; };
答案 1 :(得分:2)
一些有用的:
如果你需要一些更狭隘的定义,你可以将几个std::is_same
特征组合在一起,例如。
template<typename T>
struct is_int_or_char_or_float {
static const bool value =
std::is_same<T, int>::value ||
std::is_same<T, char>::value ||
std::is_same<T, float>::value;
};
答案 2 :(得分:1)
如果您想知道它是否属于特定类型,可以使用std::is_same
:
#include <type_traits>
bool isInt = std::is_same<int, T>::value;
如果您想知道它是否是任何整数类型,std::is_integral
bool isInt = std::is_integral<T>::value;
答案 3 :(得分:0)
您可以使用此代码:
#include <typeinfo>
#include <iostream>
class someClass { };
int main(int argc, char* argv[]) {
int a;
someClass b;
std::cout<<"a is of type: "<<typeid(a).name()<<std::endl; // Output 'a is of type int'
std::cout<<"b is of type: "<<typeid(b).name()<<std::endl; // Output 'b is of type someClass'
return 0;
}