我将其输入到模板函数中,只是为了查看它是否可行:
if (T==int)
并且intellisense没有抱怨。这是有效的C ++吗?如果我做了怎么办?
std::cout << (int)int; // looks stupid doesn't it.
答案 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
。