我有一个std::vector
指向派生类的cDerivedClass
共享指针,我也有基类的共享指针。所以是这样的:
typedef SHARED_PTR<cBaseClass> cBaseClassPtr;
typedef SHARED_PTR<cDerivedClass> cDerivedClassPtr;
std::vector<cDerivedClassPtr> vDerivedPtrList;
现在,如果我想要一个CDerivedClass::AddComponent(cBaseClassPtr inpBaseClass)
方法接受 cBaseClassPtr 类型的参数并将其添加到派生类的向量 (vDerivedPtrList) 中,我该怎么做呢?
我知道 dynamic_cast 不起作用,因为除非基类是多态的,否则动态转换不允许基到派生的转换。我尝试将 cBaseClassPtr 静态转换为 cDerivedClassPtr,但我抛出了一个错误。
void cDerivedClass::AddComponent(cBaseClassPtr inpBaseClass)
{
MY_ASSERT(inpBaseClass, "Component cannot be NULL");
cDerivedClassPtr pDerviedPtrToAdd = static_cast<cDerivedClassPtr>(inpBaseClass);
this->mvComponentList.push_back(pDerviedPtrToAdd);
}
编辑:确切地说,这是我得到的错误:
No matching conversion of static_cast from 'cBaseClassPtr' (aka 'shared_ptr<cBaseClassPtr>') to 'cDerivedClassPtr' (aka 'shared_ptr<cDerivedClassPtr>');
我正在使用 boost 的智能指针实现boost::shared_ptr