Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Typedef在不指定模板参数的情况下定义模板类_C++_Templates_C++11_Typedef_Tr1 - Fatal编程技术网

C++ Typedef在不指定模板参数的情况下定义模板类

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

我试图根据是否有可用的TR1库来定义无序的_映射或std::map。但是我不想指定模板参数。从我到目前为止所阅读的内容来看,在正式的c++0x标准可用之前,不带参数的类型定义模板是不可能的。那么,有人知道一个优雅的解决方法吗

#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”,从语义上讲,它似乎更为正确,也更为惯用。