键入trait以从嵌套类型中提取模板参数

时间:2016-03-01 10:01:27

标签: c++ templates typetraits

我需要从嵌套类型中获取模板参数。这是一个显示我需要提取的类型的简单示例。

#include <iostream>
#include <typeinfo>

template<typename T>
void function(T) {
    // T = 'struct A<int>::B'
    //
    // Here I want to get the template value type e.g. 'int' from T
    // so that this would print 'int'. How can this be done?        
    std::cout << typeid(T).name() << std::endl; 
}

template<typename T>
struct A { 
    using B = struct { int f; };
};

int main() {
    function(A<int>::B{});
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您无法通过简单的演绎提取此内容。虽然BA的嵌套类,但类型本身是不相关的。

一种选择是&#34;保存&#34; B内的类型并稍后解压缩:

template<typename T>
struct A { 
    struct B { 
        using outer = T; 
        int f; 
    };
};

然后您只需使用typename T::outer来获取类型:

template<typename T>
void function(T) {     
    std::cout << typeid(typename T::outer).name() << std::endl; 
}