2010-08-28 90 views
5

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

typedef std::map myOwnMap; 

不起作用。

如果不是,有没有什么好的理由?

+1

我认为你可以做的最好的是'使用std :: map;'将'map'导入到本地命名空间。 – 2010-08-28 14:20:13

回答

18

在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>; 

在这里你去:)

6

该功能将在C++ 0x中引入,称为模板别名。它看起来是这样的:

template<typename Key, typename Value> 
using MyMap = std::map<Key, Value> 
13

C++ 03标准不支持模板类型定义。有解决方法,但是:

template<typename T> 
struct MyOwnMap { 
    typedef std::map<std::string, T> Type; 
}; 

MyOwnMap<int>::Type map; 
+0

优秀的基于元编程的答案。 +1 – paercebal 2010-08-28 14:25:21

+0

除了最后的名字不会更短...... – UncleBens 2010-08-28 15:21:39

+0

@叔叔:他没有说这是为了长度目的,他的例子采用了相同数量的按键。 – 2010-08-28 15:35:12