私は単純なマップstd::map<T1, std::string>
を作成したいと思います。std::string
を返す関数があります。my_map[some_new_element]
が呼び出され、その関数が呼び出され、その戻り値がsome_new_element
キーの値。そのようなことは可能なのですか?デフォルトのコンストラクタを `std :: map <T1, T2>`の値に設定することはできますか?
3
A
答えて
3
または値タイプまたは演算子[]をラップすることができます。
最終ラッパーが最も簡単になります。
template <typename T>
std::string& get_default(std::map<T, std::string>& map, const T& key) {
auto it = map.find(key);
if (it == map.end()) {
return map[key] = create_default_value();
} else {
return *it;
}
}
値型はどちらか、あまりにも難しいことではありません:あなたがしたいよう
struct default_string {
std::string wrapped_string;
default_string() : wrapped_string(create_default_value()) {}
explicit default_string(const std::string& wrapped_string)
: wrapped_string(wrapped_string) {}
operator const std::string&() const { return wrapped_string; }
operator std::string&() { return wrapped_string; }
};
ラッピングマップは、もう少し作業がかかりますtypedefを含むインタフェース全体を複製する必要があります。注:このコードはテストされておらず、概念の証明として扱われ、あなたを正しい方向に向けることができます。
+0
+1 'get_default'関数のために、私は本当に1つの特定のコンストラクタを強制するために新しい型を作成することを本当に好きではありません... –
2
std::string
の小さなラッパークラスはどうですか?カスタムアクションを定義することができますStringWrapper
のコンストラクタで
std::map<T1, StringWrapper> mymap;
:
class StringWrapper {
StringWrapper() { //... your code
}
operator std::string&() { return m_string; } // or something like that
private:
std::string m_string;
};
今、あなたは、次のマップタイプを使用しています。マップにアイテムを挿入すると呼び出されます。
関連する問題
- 1. std :: map <t1, t2> :: erase(イテレータの位置)の作業?
- 2. イテレータのコンストラクタでデフォルト値を設定する方法は? C++
- 3. std :: map <string,int>デフォルトの初期化値
- 4. C#クラスのプロパティを常に特定のデフォルト値に設定することはできますか?
- 5. 私はstd :: map :: operator []に触れることができますか?
- 6. std :: functionのデフォルト値を指定する
- 7. なぜstd :: functionインスタンスにデフォルトのコンストラクタがあるのですか?
- 8. タプルはどうですか<T1,T2>。<T1,T2>(T1アイテム1、T2アイテム2)を作成しますか?
- 9. DBNullのときにDataTableのオブジェクトにデフォルト値を設定する
- 10. NHibernateでプロパティにデフォルト値を設定することは可能ですか
- 11. プロパティのコンストラクタはコンストラクタでのみ設定できますが、どこからでも取得できますか?
- 12. Doxygenがstd :: shared_ptrまたはstd :: mapを認識できるか
- 13. construutureでデフォルトのパラメータ値を設定できますか?
- 14. mapキー/値が変更されないと、std :: map iteratorの出力順序は一定になりますか?
- 15. はphpmyadminの中で1に、デフォルトのINT値を設定することはできません
- 16. DynamicControlに表示するデフォルト値を設定することはできますか? Not
- 17. std :: mapをstd :: mapのキーとして使用する
- 18. デフォルト値を設定できません
- 19. PHP:デフォルトのphp.iniファイルで定数を設定することができます
- 20. std :: mapの値へのポインタ
- 21. タプル<T1,T2>とKeyValuePairの間の変換<T1, T2>
- 22. Nhibernate .Net属性マッピング。デフォルト値を設定することは可能ですか?
- 23. テンプレートクラス値のC++ std :: map
- 24. Springの@Valueのデフォルト値としてnullを設定できますか?
- 25. Pythonのコンストラクタとデフォルト値
- 26. Sequelモデルのデフォルト値はどのように設定できますか?
- 27. Androidのswitchpreferenceどのように私はスイッチの設定のデフォルト値を設定できますか?
- 28. 最低SDK <23でcheckSelfPermissionを設定することはできますか?
- 29. デフォルトのボディマージンは設定されていませんが、デフォルト値は8pxです。どのようにこの値を取得できますか?
- 30. <sessionState>要素のデフォルト設定はどこにありますか?
確かに何らかのラッパーで可能ですが、質問は*なぜ*ですか?地図のポイントは何ですか?固定値だけが必要な場合は、関数を直接呼び出さないのはなぜですか? –
関数はパラメータを受け取りますか? –