2010-08-28 310 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