继承而不是typedef

Dan*_*ite 11 c++ inheritance templates typedef

C++无法使用typedef创建模板或者键入模板化模板.我知道如果我继承并使我的课成为一个模板,它就会起作用.

例子:

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

//Valid, but advantageous?
template <class T>
class MyVectorType : public vector<T> { };
Run Code Online (Sandbox Code Playgroud)

这样做有利于我可以"伪造"一个typedef还是有更好的方法来做到这一点?

Mag*_*iie 13

C++ 0x将使用using关键字添加模板typedef .

您的解决方案声明了一个新类型,而不是类型"别名",例如,您无法使用a初始化MyVectorType &(引用)vector<T>.这对您来说可能不是问题,但如果是,但您不想在代码中引用向量,则可以执行以下操作:

template <typename T>
class MyVectorType {
public:
  typedef std::vector<T> type;
};
Run Code Online (Sandbox Code Playgroud)


Dav*_*Ray 10

继承不是你想要的.模仿模板化typedef的更惯用的方法是:

template <typename T> struct MyVectorType {
    typedef std::vector<T> t;
};
Run Code Online (Sandbox Code Playgroud)

请参考typedef,如下所示:

MyVectorType<T>::t;
Run Code Online (Sandbox Code Playgroud)