泛型类的Typedef(别名)

时间:2010-08-28 14:10:47

标签: c++ templates

是否可以在C ++中创建模板类的别名(不指定参数)?

typedef std::map myOwnMap;

不起作用。

如果没有,有什么好理由吗?

5 个答案:

答案 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> {

};