c++ - 如何使用 std::conditional 根据模板参数类型设置类型

标签 c++ templates conditional-statements

我有一个模板类:

template<typename T>
class Foo
{
    X x;
}

对于 Foo< P > 我希望 X 是 int。 对于 Foo< Q >,我希望 X 是 float 的。

我正在 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;
}

http://ideone.com/KzIILu

但是,这不会编译。

正确的做法是什么?

最佳答案

您应该使用编译时检查,而不是运行时检查。

using Xint = typename conditional<is_same<T, P>::value, int, float>::type;

关于c++ - 如何使用 std::conditional 根据模板参数类型设置类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27039035/

相关文章:

java - 为什么我应该总是使用 ||而不是 |和 && 而不是 &?

java - 添加两个 double 值导致值等于 java 中的第二个 double 值

c++ - labs.exe : 0xC0000005: Access violation reading location 0x0000004D 中 0x6BE20E11 (ucrtbased.dll) 的未处理异常

c++ - 为什么每次成功的 QueryInterface() 调用之后都是 Release() 调用?

c++ - 子类化 std::optional 时编译错误

C++ 在 int main() 之上声明模板 <Class T>

templates - 如何明确引用此模板成员?

c++ - 让模板引用 union 继承类中的成员

java - Java 中具有多个条件的迭代器循环

c++ - 模板参数推导和指向常量的指针