最近、私はあまり使用されていないSTLの機能の1つ、カスタムアロケータを使用していますが、私は意味のオーバーヘッドを減らすために深刻な助けが必要です。たとえば、ファイル名を1組のintと1つのshared_ptrの順序付けられていないマップにトークンにマップする順序付けられていないマップを定義しますが、カスタムのアロケータを使用します。C++でのテンプレートの複雑さの軽減
typedef std::pair<int, int> token_key_type;
typedef std::unordered_map<
token_key_type,
std::shared_ptr<Token>,
std::hash<token_key_type>,
std::equal_to<token_key_type>,
Allocator<
std::pair<
const token_key_type,
std::shared_ptr<
Token
>
>
>
> filename_map_value_type;
std::unordered_map<
string,
filename_map_value_type,
std::hash<string>,
std::equal_to<string>,
Allocator<
std::pair<
const string,
filename_map_value_type
>
>
> tokens;
これは404文字の定義です。そして、それを構築するためには、既定で構築することができないAllocatorと定義が存在しないバケットカウントを除き、すべてのテンプレート引数にデフォルトを渡さなければなりません。こいつ。もちろん、最初のマップの値の型も同様に構築する必要があるため、挿入するたびに同じことを繰り返します。
私自身のunordered_mapを書かなくてもこれを回避できる方法はありますか?真剣に私の生産性を低下させ始めています。
編集:申し訳ありません。私は一般的にSTLコンテナのために、特にunordered_mapだけでなく、それが最悪のケースであることを意味しました。私はまた、規則的なマップ、unordered_setなどでこの問題を抱えており、私が間違いなく必要とする可能性のあるすべての可能なSTLコンテナについてこれを行う関数を書くことはできません。
テンプレートのインスタンス化の一部を探しているのでしょうか? http://coding.derkeiler.com/Archive/C_CPP/comp.lang.cpp/2004-08/2307.html –