boost::shared_ptr の基本型を抽出するテンプレートを作成しようとしています。
私はこのテンプレートを書きました:
template<typename T>
struct ExtractBaseType;
template<typename T>
struct ExtractBaseType<boost::shared_ptr<T> >
{
typedef T type;
};
プレーンな shared_ptr では問題なく動作します。これ:
struct A
{
};
ExtractBaseType<boost::shared_ptr<A> >::type a_thing;
std::cout << typeid(a_thing).name() << std::endl;
「1A」を出力します。
ただし、これはコンパイルされません。
struct B : boost::shared_ptr<A>
{
};
ExtractBaseType<B>::type b_thing;
コンパイラは、ExtractBaseType が定義されていないと文句を言います。
なんでそうなの?そして、これはどのように行われますか?