C++ Typedef在不指定模板参数的情况下定义模板类
我试图根据是否有可用的TR1库来定义无序的_映射或std::map。但是我不想指定模板参数。从我到目前为止所阅读的内容来看,在正式的c++0x标准可用之前,不带参数的类型定义模板是不可能的。那么,有人知道一个优雅的解决方法吗C++ Typedef在不指定模板参数的情况下定义模板类,c++,templates,c++11,typedef,tr1,C++,Templates,C++11,Typedef,Tr1,我试图根据是否有可用的TR1库来定义无序的_映射或std::map。但是我不想指定模板参数。从我到目前为止所阅读的内容来看,在正式的c++0x标准可用之前,不带参数的类型定义模板是不可能的。那么,有人知道一个优雅的解决方法吗 #ifdef _TR1 #include <unordered_map> typedef std::tr1::unordered_map MyMap; //error C2976: too few template arguments #else #inclu
#ifdef _TR1
#include <unordered_map>
typedef std::tr1::unordered_map MyMap; //error C2976: too few template arguments
#else
#include <map>
typedef std::map MyMap; //error C2976: too few template arguments
#endif
#ifdef\u TR1
#包括
typedef std::tr1::无序映射MyMap//错误C2976:模板参数太少
#否则
#包括
typedef std::map MyMap//错误C2976:模板参数太少
#恩迪夫
您必须为typedef使用完整类型
改用#define宏。我看到的方法是将typedef包装在模板结构中:
template<typename KeyType, typename MappedType>
struct myMap
{
#ifdef _TR1
typedef std::tr1::unordered_map<KeyType, MappedType> type;
#else
typedef std::map<KeyType, MappedType> type;
#endif
};
模板
结构myMap
{
#ifdef_TR1
typedef std::tr1::无序映射类型;
#否则
typedef std::映射类型;
#恩迪夫
};
然后在代码中调用它,如下所示:
myMap<key, value>::type myMapInstance;
myMap::键入mymaInstance;
它可能比你想要的要冗长一些,但我相信它满足了C++的当前状态。
有时候最好是退回旧的方式。管道胶带编程处于最佳状态。不幸的是,宏不尊重范围。请参阅这个非常接近的问题:以及提供的答案。模板类型DEFS是无效的C++命令BeooT-谢谢,这正是我所期待的非常类似的问题:它还有另一个答案,这里没有提到:“别名模板”在C++ 11中确实是模拟C++中模板类型DEFS的常见方法。然而,我会将typedef命名为“type”而不是“value”,从语义上讲,它似乎更为正确,也更为惯用。