比较C ++中的类型名称

时间:2010-10-14 05:38:31

标签: c++

我将其输入到模板函数中,只是为了查看它是否可行:

if (T==int)

并且intellisense没有抱怨。这是有效的C ++吗?如果我做了怎么办?

std::cout << (int)int;  // looks stupid doesn't it.

6 个答案:

答案 0 :(得分:9)

为了满足您的要求,您应该使用typeid运算符。然后你的表达式看起来像

if (typeid(T) == typeid(int)) {
    ...
}

明显的例子说明这确实有效:

#include <typeinfo>
#include <iostream>

template <typename T>
class AClass {
public:
    static bool compare() {
        return (typeid(T) == typeid(int));
    }
};

void main() {
    std::cout << AClass<char>::compare() << std::endl;
    std::cout << AClass<int>::compare() << std::endl;
}

所以在stdout你可能会得到:

0
1

答案 1 :(得分:5)

不,这不是有效的C ++。

IntelliSense不够智能,无法找到代码出错的一切;它必须完全编译代码才能做到这一点,并且编译C ++非常慢(用于IntelliSense的速度太慢)。

答案 2 :(得分:1)

不,你不能使用if(T == int)和std :: cout&lt;&lt;(int)int;

答案 3 :(得分:1)

你可能甚至没有实例化你的模板,这就是它编译的原因。

答案 4 :(得分:1)

这是你想要做的吗?

if(typeid(T) == typeid(int))

这个?

cout << typeid(int).name();

答案 5 :(得分:0)

从 C++11 开始,您可以使用 std::is_same<T1, T2>::value