我需要从嵌套类型中获取模板参数。这是一个显示我需要提取的类型的简单示例。
#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;
}
答案 0 :(得分:2)
您无法通过简单的演绎提取此内容。虽然B
是A
的嵌套类,但类型本身是不相关的。
一种选择是&#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;
}