1

有什么方法可以判断模板参数是否是特定的基本数据类型,如 int 或 unsigned int?std::is_base_of 不这样做,尝试过。我想编写可以装箱所有基本数据类型的集合,但我找不到一种方法来判断它是哪种类型......

4

4 回答 4

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 }; };
于 2013-01-17T00:25:06.683 回答
2

一些有用的:

std::is_integral

std::is_floating_point

std::is_arithmetic

如果您需要一些更窄的定义,您可以将几个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;
};
于 2013-01-17T00:17:08.957 回答
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;
于 2013-01-17T00:15:06.967 回答
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;
}
于 2013-01-17T00:16:19.633 回答