Typedef (псевдоним) универсального класса - PullRequest
6 голосов
/ 28 августа 2010

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

typedef std::map myOwnMap;

не работает.

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

Ответы [ 3 ]

20 голосов
/ 28 августа 2010

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

Вот, пожалуйста,)

14 голосов
/ 28 августа 2010

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

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

MyOwnMap<int>::Type map;
6 голосов
/ 28 августа 2010

Эта функция будет введена в C ++ 0x и называется псевдонимом шаблона.Это будет выглядеть так:

template<typename Key, typename Value>
using MyMap = std::map<Key, Value>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...