我有一个模板类:
template<typename T>
class Foo
{
X x;
}
对于Foo&lt; P>我希望X成为int。 对于Foo&lt; Q>我希望X能够漂浮。
我在ideone上尝试以下内容:
#include <iostream>
#include <typeinfo>
using namespace std;
class P{};
class Q{};
template<typename T>
class Base
{
using Xint = conditional<typeid(T)==typeid(P), int, float>;
Xint x;
public:
void Foo() { cout << typeof(x); }
};
int main() {
Base<P> p; cout << p.Foo() << endl;
Base<Q> q; cout << q.Foo() << endl;
return 0;
}
但是,这不会编译。
这样做的正确方法是什么?
答案 0 :(得分:6)
您应该使用编译时检查,而不是运行时。
using Xint = typename conditional<is_same<T, P>::value, int, float>::type;