我有一个 ISceneNode 接口和一个 SceneNode 基类。从 SceneNode 类派生出 MeshNode、AnimNode、LightNode、CameraNode 等...
现在我有一个演员类,它通过一个方法接收一个 shared_ptr 并将其存储在一个字段中。
我想做的是将任何 std::shared_ptr 或其他派生类发送到接受 shared_ptr 的函数中。
使用裸指针,这将是一种隐式转换。
我想出的解决方案是为每个派生编写一个重载,然后使用 dynamic_pointer_cast 在方法中对其进行强制转换。太恶心了,应该有更好的方法。
有没有办法获得隐式转换,或者我不知道有更好的方法来处理这个?处理这个问题的正确方法是什么?
void SomeFunc()
{
std::shared_ptr<MeshNode> pMeshNode( new MeshNode() );
gActor.SetNode( pMeshNode ); // won't compile.
// or do i have to do it like this
gActor.SetNode( std::dynamic_pointer_cast<ISceneNode> (pMeshNode) );
}
void Actor::SetNode( std::shared_ptr<ISceneNode> pNode )
{
mpNode = pNode;
}
// or do I have to do it like this? Making an over load for each derived.
void Actor::SetNode( std::shared_ptr<MeshNode> pMeshNode )
{
mpNode = std::dynamic_pointer_cast<ISceneNode> (pMeshNode);
}