Наследование вместо typedef

С++ не может сделать шаблон из typedef или typedef шаблоном. Я знаю, если я наследую и сделаю свой класс шаблоном, он будет работать.

Примеры:

// Illegal
template <class T>
typedef MyVectorType vector<T>;

//Valid, but advantageous?
template <class T>
class MyVectorType : public vector<T> { };

Делает это выгодно, чтобы я мог "подделать" typedef или есть ли лучшие способы сделать это?

Ответы

Ответ 1

С++ 0x добавит шаблон typedefs с помощью ключевого слова using.

Ваше решение объявляет новый тип, а не тип "псевдоним", например. вы не можете инициализировать MyVectorType & (ссылку) с помощью vector<T>. Для вас это не проблема, но если это так, но вы не хотите ссылаться на вектор в своем коде, вы можете сделать:

template <typename T>
class MyVectorType {
public:
  typedef std::vector<T> type;
};

Ответ 2

Наследование не то, что вы хотите. Более идиоматический подход к эмуляции шаблонизированного typedef таков:

template <typename T> struct MyVectorType {
    typedef std::vector<T> t;
};

Обратитесь к typedef следующим образом:

MyVectorType<T>::t;

Ответ 3

С++ не может сделать шаблон из typedef или typedef шаблоном.

Это зависит от того, что вы подразумеваете под typedef: std::vector<size_t> является законным - даже если size_t является typedef - и std::string является typedef для std::basic_string<char>.