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::shared_ptr