私が言って、特性クラスを持っている:テンプレートの特殊::マップ
template <class T>
struct KeyValueTraits
{
typedef typename T::key_t key_t;
typedef typename T::value_t value_t;
}
今、私はstd::map
template < typename... Args >
struct KeyValueTraits<typename std::map<Args...>::iterator >
{
typedef std::map<Args...> target_t;
typedef typename target_t::key_type key_t;
typedef typename target_t::mapped_type value_t;
};
コンパイラのすべてのイテレータのために、この形質の特殊化を宣言したいと思いますエラーを発生させます:
error C2764: 'Args': template parameter not used or deducible in partial specialization
どのようにすべての可能性のある形の特質を宣言するのですか。std::map<...>::iterator
?
できません。あなたがどんなことをやろうとしているのではありません。イテレータからコンテナ型を抽出する方法はありません。代わりに 'first'と' second'を使うことができます(C++ 11が必要です)。 –
解決しようとしている問題は何ですか?値の型として 'std :: pair'を持つイテレータではうまくいくソリューションがあります。 iterarorを取得したら、コンテナに関する情報を取得することは必ずしも可能ではありません。 –