Наследование вместо 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>
.