对于我想知道的内容,标题可能不够具有描述性:
请考虑以下代码:
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;
提前感谢任何指向正确方向的指示!
答案 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;
}