扩展类模板

AOO*_*AOO 3 c++ inheritance templates

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

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

Jam*_*lis 19

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

template <typename T>
class Vector : public std::vector<T>
Run Code Online (Sandbox Code Playgroud)

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

如果要"增强" std::vector,请使用合成(即使用std::vector类型的成员变量)或使用非成员函数来提供附加功能.


jal*_*alf 6

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

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

template <typename T>
class Vector
{
...
Run Code Online (Sandbox Code Playgroud)

并不是

template <typename T>
class Vector<T>
{
...
Run Code Online (Sandbox Code Playgroud)