2010-08-28 4 views
5

Возможно ли в C++ создать псевдоним класса шаблона (без указания параметров)?Typedef (псевдоним) общего класса

typedef std::map myOwnMap; 

не работает.

А если нет, есть ли веская причина?

+1

Я думаю, что лучшее, что вы можете сделать, это «использование std :: map;» для импорта «map» в локальное пространство имен. –

ответ

18

В C++ 98 и 03 typedef C++ может быть использован только на полный тип:

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

Шаблоны typedefs не поддерживаются стандартом C++ 03. Есть обходные пути, однако:

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

MyOwnMap<int>::Type map; 
+0

Отличный ответ на метапрограммирование. +1 – paercebal

+0

За исключением того, что результирующее имя, скорее всего, не будет намного короче ... – UncleBens

+0

@Uncle: Он не сказал, что это предназначено для длинных целей, и его пример принимает одинаковое количество нажатий клавиш. –

Смежные вопросы