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);
}