を検索し、参照することによって返します。私はこれらの2つのパブリックメソッドを持つクラスを持っているSTLのmapで
私は、共通のfind
を分離し、参照見つかっEntityCTC
で返すためにこれらのメソッドをリファクタリングしたいと思いますが、私は「見つからないキー」の場合に処理する方法を見つけ出すことはできません。
EntityCTC& findEntity(const EntityCTCId id) {
auto it = entities.find(id);
if(it != entities.end())
return it->second.state;
else
// ???
}
のみを私が見つけた解決策は、この新しいメソッド内で例外をスローすることですが、それはsetEntityState
の中にtry-catch
を使用して、更新と新しい挿入を区別することを意味します(例外管理を論理分岐として使用するのではなく、
他の方法を教えてください。
私はあなたが過度にリファクタリングしているようです。 2つの異なる関数で同じマップ上でfind()を呼び出すのに問題は見られません。それぞれの目的が異なる場合です。 – Eli
について:bool findEntity(const EntityCTCId id、EntityCTC&state)?さらに、idをエンティティから削除する可能性があるため、参照を返すことは適切な方法ではありません。 –
getにはentities.atを、setにはStoryTellerの提案(またはoperator [] ')を使用すると何が問題になりますか?なぜ 'EntityCTCNotFound'が' std :: string'で構築され、 'EntityCTCId'では構築されないのですか? – Caleth