2016-03-01 67 views
0

我需要從嵌套類型中獲取模板參數。這裏有一個簡單的例子來展示我需要提取的類型。從嵌套類型中提取模板參數的類型特徵

#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

你可以添加一個'的typedef 'B'裏面? – Jarod42

回答

1

你不能通過簡單的演繹來解壓。儘管BA的嵌套類,但類型本身並不相關。

一種選擇是「拯救」的類型裏面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; 
} 
+0

一個不錯的簡單解決方案。我嘗試了很多不同的東西,但沒有想到這個。謝謝! –