名前付きオブジェクトストレージを設計する最良の方法を見つけようとしました:std :: map < std ::文字列、NamedObject>std :: map design:マップキーと格納されたオブジェクト名(メンバ)のstd :: stringを使用
std :: mapここで、keyはオブジェクトの名前です。一方で、getName()メソッドを使用してその名前を返すなど、自分自身でオブジェクトを識別できるようにしたいと思います。私を苛立たせるものは、std :: stringの2つのコピーを設定する以外の方法はありませんでした.1つはキー用で、もう1つはメンバーとしてのオブジェクト内にあります。
誰かが提案をお持ちの場合は、
編集:
基本的に、これはリソースマネージャです。最も重要なことは、彼の名前でリソースを見つけることです。しかしいつか、私は手の下にリソースを持っているとき、私は彼の名前を知ることができるようにしたいと思います。最初は、私はベクトルについて考えました...しかし、それを動かして、すべてのオブジェクトに正しい名前を見つけるために名前を尋ねるというアイデアは、私には悪いものでした。
余分な複雑さのように思える、私つまり、boost_multi_index_containerはこれを許可しますが、あなたが望ましくない可能性がある余分な複雑さです。 –
はい。私はstd :: mapとして使いやすいソリューションを探しています。私はオブジェクトから名前を削除し、それを識別するためにイテレータを使用することを考えていますが、マップ管理以外の場所でstd :: mapの一部を使用したくありません。 –
はい、これは標準ライブラリのすべての結合コンテナの制限です。だからこそ、ほとんどの問題は「命名」と「実行」を別々の概念として表現できるため、通常はそれらを分離することが適切です。 –