テンプレートでは、テンプレートパラメータを実際の非テンプレートタイプにドリルダウンしたいと思います。それで:
template <typename T>
struct MyTemplate
{
// sadly there's no extract_Base
typedef typename extract_base<T>::MyType WorkType;
};
struct X {};
template <typename T> struct Templ {};
//MyTemplate<Templ<X>>::WorkType is X;
//MyTemplate<X>::WorkType is X;
私が見る唯一の解決策は、std :: vector <X> :: value_typeがXのように実際の基本型を定義することです。しかし、各宛先テンプレート内に補助型を定義せずにこれを行う方法があるかどうか興味があります。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2965.htmlのようなものを見ましたが、これはドラフトですか?よくわかりません。
はい、多重継承があることは知っていますが、単純な場合でもこれは素晴らしいことです。
更新:Nawazソリューションは私にとって非常にうまく機能し、特定のケースに拡張するのは簡単です。
template<template<typename, typename> class X, typename T1, typename T2>
struct extract_base <X<T1, T2>> //specialization
{
typedef T1 base;
};
is_base_ofやその他のフィルターをT1/T2などに適用することもできます。したがって、X <T、U>では機能します-少なくともg++4.6.7では機能します。