В шаблоне я хочу детализировать параметр шаблона до реального нешаблонного типа. Итак:
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
Я видел что-то вроде 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