Rol*_*n_s 26 c++ templates typedef tr1 c++11
我正在尝试输入undedered_map或std :: map,这取决于是否有可用的TR1库.但我不想指定模板参数.从我到目前为止所读到的,在官方c ++ 0x标准可用之前,不能使用不带参数的typedef'ing模板.那么有谁知道这个优雅的解决方法?
#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
Run Code Online (Sandbox Code Playgroud)
fbr*_*eto 38
我看到这样做的方法是将typedef包装在template-struct中:
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
};
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中调用它,如下所示:
myMap<key, value>::type myMapInstance;
Run Code Online (Sandbox Code Playgroud)
它可能比你想要的更冗长,但我相信它满足了当前C++状态的需要.
| 归档时间: |
|
| 查看次数: |
15266 次 |
| 最近记录: |