是否可以在C ++中创建模板类的别名(不指定参数)?
typedef std::map myOwnMap;
不起作用。
如果没有,有什么好理由吗?
答案 0 :(得分:20)
在C ++ 98和C ++ 03 typedef
中,只能用于完整类型:
typedef std::map<int,int> IntToIntMap;
使用C ++ 0x,有一种新的闪亮语法可以替换typedef
:
using IntToIntMap = std::map<int,int>;
还支持template
别名:
template <
typename Key,
typename Value,
typename Comparator = std::less<Key>,
typename Allocator = std::allocator< std::pair<Key,Value> >
>
using myOwnMap = std::map<Key,Value,Comparator,Allocator>;
你走了:))
答案 1 :(得分:14)
C ++ 03标准不支持模板typedef。但是有一些解决方法:
template<typename T>
struct MyOwnMap {
typedef std::map<std::string, T> Type;
};
MyOwnMap<int>::Type map;
答案 2 :(得分:6)
此功能将在C ++ 0x中引入,称为模板别名。它看起来像这样:
template<typename Key, typename Value>
using MyMap = std::map<Key, Value>
答案 3 :(得分:0)
对于C ++较低的11只有一种方法
template <...>
struct my_type : real_type<...> {}
答案 4 :(得分:-1)
另一种方法:
template <
typename Key,
typename Value,
typename Comparator = std::less<Key>
>
class Map: public std::map<Key,Value, Comparator> {
};