2016-03-01 1 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

Вы можете добавить 'ЬурейеЕ 'внутри' B'? – Jarod42

ответ

1

Вы не можете извлечь это путем простого вычета. Хотя B является вложенным классом A, сами типы не связаны.

Одним из вариантов было бы «сохранить» тип внутри 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

Хорошее и простое решение. Я пробовал так много разных вещей, но не думал об этом. Благодаря! –