我的理解是,将std::shared_ptr<Base>
投射到您需要使用std::shared_ptr<Derived>
的{{1}}。但是我发现我能够使用g ++ 4.7执行以下操作,但我不知道为什么。我怀疑它是一个编译器错误,但我想知道标准中是否有某些东西我错过了。
BaseClass.h
std::dynamic_pointer_cast
DerivedClass.h
class BaseClass
{
template<typename PtrType = BaseClass> using Ptr = std::shared_ptr<PtrType>;
// ...
};
EvenMoreDerivedClass.h
class DerivedClass : public BaseClass
{
//...
BaseClass::Ptr<SomeType> GetChild() { return m_child; }
BaseClass::Ptr<SomeType> m_child;
//..
};
EvenMoreDerivedClass.cpp
template<typename T>
class EvenMoreDerivedClass : public DerivedClass
{
// ...
MethodUsingChildClass();
// ...
};