扩展类模板

时间:2010-04-29 12:48:48

标签: c++ inheritance templates

如何扩展模板类,例如vector?以下代码不起作用。编译器抱怨'Vector'不是模板。

template <typename T>
class Vector<T> : public std::vector<T>
{
public:
    void DoSomething()
    {
        // ...
    }
};

2 个答案:

答案 0 :(得分:19)

你的语法错了;你需要使用:

template <typename T>
class Vector : public std::vector<T>

也就是说,如果没有其他原因,你不应该通过继承来扩展标准库容器,因为它们没有虚拟析构函数,因此它本身就是不安全的。

如果您想“增强”std::vector,请使用合成(即使用std::vector类型的成员变量)或使用非成员函数来提供其他功能。

答案 1 :(得分:6)

这与扩展另一个类无关。问题是您自己的派生类。

您可以像这样定义一个类模板:

template <typename T>
class Vector
{
...

而不是

template <typename T>
class Vector<T>
{
...