テンプレートで型を指定してdynamic_pointer_castを使ってキャストした後でweak_ptr変数に格納して返すという処理を作っているのですが、探したいオブジェクトが見つからなかった時にnullptrで返せないので行き詰っています、、、。
weak_ptrの場合どのようにすれば何もないという命令になるのでしょうか?
返り値がweak_ptr<T>なのでtrue / falseで返せなくてかなり困っています、、、。
C++
1 // コンポーネントの参照を取得 2 template<typename T> 3 inline std::weak_ptr<T> GetComponent() { 4 std::weak_ptr<T> component_tmp; 5 // コンポーネントを検索 6 for (std::shared_ptr<Component> component : components) { 7 // Component型で登録されているコンポーネントを指定された型にダウンキャスト 8 component_tmp = std::dynamic_pointer_cast<T>(component); 9 // あったら返す 10 if (!component_tmp.expired()) { 11 return component_tmp; 12 } 13 } 14 return ???; 15 }
補足
すみません質問文の最後にboolで返すような記述をしてしまい誤解が生まれてしまったかもしれません。
返り値はweak_ptrのままで戻り値はboolにはしないつもりです。
やりたいことはweak_ptrがnullの時、例えば受け取り側で
C++
1std::weak_ptr<Rigidbody> p_rigid; 2p_rigid = GetComponent<Rigidbody>();
とした際コンポーネントリストにRigidbodyが存在しない場合
C++
1p_rigid = GetComponent<Rigidbody>();
の時点でエラーが出て止まってほしいんです。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/23 07:25