Черты типа C++ для извлечения класса параметров шаблона

В шаблоне я хочу детализировать параметр шаблона до реального нешаблонного типа. Итак:

template 
struct MyTemplate
{
    // sadly there's no extract_Base
    typedef typename extract_base::MyType WorkType;
};
struct X {};
template  struct Templ {};
//MyTemplate>::WorkType is X;
//MyTemplate::WorkType is X;

Единственное решение, которое я вижу, это определить реальный базовый тип, такой как std::vector::value_type is X. Но мне любопытно, есть ли способ сделать это без определения вспомогательных типов внутри каждого целевого шаблона.

Я видел что-то вроде http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2965.html, но это черновик? и я не совсем понимаю.

Да, я знаю, что существует множественное наследование, но даже для простого случая это было бы неплохо.

ОБНОВЛЕНИЕ: решение Nawaz работает для меня очень хорошо, и его легко распространить на конкретные случаи, например.

template class X, typename T1, typename T2>
struct extract_base >   //specialization
{
    typedef T1 base;
};

Я даже могу применить is_base_of или другие фильтры к T1/T2 и так далее. Так что это работаетдля X — по крайней мере, с g++ 4.6.7.

8
задан queen3 15 June 2012 в 20:44
поделиться