是否可以将std :: pair用作(唯一)模板参数用于关联容器,如std :: map?

时间:2015-10-23 11:34:15

标签: c++ templates typedef

对于我想知道的内容,标题可能不够具有描述性:
请考虑以下代码:

typedef std::pair<std::string, int> myPair;
typedef std::map<std::string, int> myMap;

如您所见,两个typedef都使用相同的模板参数。 现在,我想确保两个typedef始终使用相同的模板参数。 实现这一目标的一种稍微迂回的方式可能是:

typedef arg1 std::string;
typedef arg2 int;

typedef std::pair< arg1, arg2 > myPair;
typedef std::map< arg1, arg2 > myMap;

现在,我想知道,如果有更好的方法,那就类似于:

typedef std::pair<std::string, int> myPair;
typedef std::map< myPair > myMap;

提前感谢任何指向正确方向的指示!

1 个答案:

答案 0 :(得分:4)

#include <map>
#include <utility>

template <typename T>
struct make_map;

template <typename K, typename V>
struct make_map<std::pair<K,V> >
{
    typedef std::map<K,V> type;
};

测试:

#include <string>

int main()
{
    typedef std::string arg1;
    typedef int arg2;

    typedef std::pair<arg1, arg2> myPair;
    typedef make_map<myPair>::type myMap;

    myMap m;
    m["foo"] = 1;
}

DEMO