2
我正在嘗試編寫一個模板來提取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是不確定的。
爲什麼這麼說?這將如何完成?
shared_ptr不是作爲一個基類來設計的,通常shared_ptr是按值取值的。根據您的派生類,這可能會有意想不到的行爲。 shared_ptr可能應該是一個final類,或者至少你應該像對待它一樣。 – bames53 2012-04-13 17:55:51