Как typedef класс шаблона?

Как мне typedef a template class? Что-то вроде:

typedef std::vector myVector;  // <--- compiler error

Я знаю два способа:

(1) #define myVector std::vector // not so good
(2) template<typename T>
    struct myVector { typedef std::vector<T> type; }; // verbose

У нас есть что-то лучше в С++ 0x?

Ответ 1

Да. Он называется шаблон псевдонима, и это новая функция в С++ 11.

template<typename T>
using MyVector = std::vector<T, MyCustomAllocator<T>>;

Использование тогда будет таким, каким вы ожидаете:

MyVector<int> x; // same as: std::vector<int, MyCustomAllocator<int>>

GCC поддерживает его с 4.7, а Clang - с версии 3.0.

Ответ 2

В С++ 03 вы можете наследовать от класса (публично или конфиденциально) для этого.

template <typename T>
class MyVector : public std::vector<T, MyCustomAllocator<T> > {};

Вам нужно сделать немного больше работы (в частности, копировать конструкторы, операторы присваивания), но это вполне выполнимо.