C ++ type_info作为模板(typename)参数

时间:2014-01-29 18:15:38

标签: c++ templates typename

有没有办法在C ++中使用const std::type_info&作为模板参数?

例如

template < typename T > class A
{
public:
    A(){}
    const std::type_info& type() const
    {
        return typeid(T);
    }
};

template < typename T > void Do()
{
    // Do whatever
}

int main()
{
    A<int> MyA;
    // Something like: Do<MyA.type()>(); or Do<typeid(MyA.type())>();
}

1 个答案:

答案 0 :(得分:3)

您不能将运行时类型信息用作编译时模板参数。

在C ++ 11中,decltype可以为您提供表达式的静态类型:

Do<decltype(MyA)>();

从历史上看,您可以做的最好的事情是使用另一个函数模板从其参数中推断出类型:

template <typename T> void Do(T const &) {Do<T>();}

Do(MyA);