へなちょこプログラマ blog

ゲーム制作・プログラミング・趣味について記載するブログ

【C++】dynamic_pointer_cast

目次

dynamic_pointer_castとは?

 

間違ったことを書いている可能性があるので参考程度にお願いします。

 

現在DirectX11で作っているゲームの中でポリモーフィズムを利用するのにActorクラスを継承してPlayerやらEnemyを作っていたのですが、Player固有の関数を呼びたくてdynamic_castする必要が出てきました(しなくていいコードがかければ・・・)。shared_ptrを使っていたのでshared_ptrをdynamic_castすることになり、最初は以下のようなコードでキャストしていたのですが・・・

 

Player* player = dynamic_cast<Player*>(root->getChild(L"Player").get());

※「root->getChild(L"Player")」は木構造で作っているのでrootからPlayerを取ってくるため

 

動くには動くのですが色々調べているとdynamic_pointer_castなるものが見つかりました。

dynamic_pointer_castはshared_ptrへの動的なキャストを行うものらしい

参照したサイト https://msdn.microsoft.com/ja-jp/library/bb982967.aspx

dynamic_pointer_castに書き直しました。

 

  std::shared_ptr<Player> player = std::dynamic_pointer_cast<Player>(root->getChild(L"Player"));

正直なところ僕のレベルでは違いがあまりわかりませんが、分れるようなレベルになりたいですし、誰かがこの記事を読んで気が付くきっかけになればうれしいです。