我正在尝试编写一个模板来提取 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 未定义。
为什么这样?这将如何完成?