Как 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> > {};
Вам нужно сделать немного больше работы (в частности, копировать конструкторы, операторы присваивания), но это вполне выполнимо.