std::vector
에 파생 클래스 cDerivedClass
에 대한 공유 포인터를 보유하고 있으며 기본 클래스에 대한 포인터도 공유했습니다. 그래서 이런 식으로 뭔가 :파생 클래스의 벡터에 기본 클래스를 추가하는 방법
typedef SHARED_PTR<cBaseClass> cBaseClassPtr;
typedef SHARED_PTR<cDerivedClass> cDerivedClassPtr;
std::vector<cDerivedClassPtr> vDerivedPtrList;
지금은, 유형 cBaseClassPtr의 인수를 받아 벡터 파생 클래스의 (vDerivedPtrList)에 추가하는 CDerivedClass::AddComponent(cBaseClassPtr inpBaseClass)
방법을 갖고 싶어 내가이 일에 대해 어떻게 갈 것인지?
나는 기본 클래스 다형성하지 않는 한베이스 - 파생 변환 동적 캐스트 허용되지 않기 때문에 dynamic_cast는 작동하지 않습니다 알고있다. 나는 cDerivedClassPtr에 cBaseClassPtr 캐스팅 정적 시도했다, 그러나 나는 오류가 발생하고 있습니다.
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
의 부스트의 구현을 사용하고
왜 그렇게하고 싶습니까? 기본 클래스에서 파생 클래스로 변환하는 것은 아무런 문제가되지 않습니다. 기본 클래스가 파생 클래스라는 것을 알지 못한다면 잘못된 디자인을 가리킬 수 있습니다. –
개인적으로 여기에 디자인 결함이 있습니다. –