次の形式の generic_pair というクラスがあるとします。
template < typename K, typename V >
struct generic_pair{
K key;
V value;
};
さて、問題は、これらのgeneric_pairsの束をSTLコンテナーに格納できるようにしたいのですが、コンテナー内のすべての < K, V > が同じタイプになるわけではありません。たとえば、一部の要素は < int, int > である場合があり、他の要素は < int , string > などである場合があります。問題は、これをどのように行うことができるかです。
私の最初の考えは、「タグ」を使用してカプセル化された型の階層を作成し、コンテナーをジェネリック型で宣言しますが、実際の要素は継承された型で宣言することです。例えば、
struct base_type{
typedef void type;
};
struct int_type: base_type{
typedef int type;
}
struct string_type: base_type{
typedef std::string type;
}
/// and so on establish a type hierarchy as necessary and then...
std::vector < generic_pair < base_type, base_type > > vec;
これを行うためのより良い、より正しい方法があると思いますか? 任意のアイデア、指示をいただければ幸いです。MPL または他の場所で同様の実装または関連するツール/手法を見たことがあれば、それも役に立ちます。(私はマクロを避けようとしています)