我该如何扩展模板类,例如向量?下面的代码不起作用。编译器抱怨'Vector'不是模板。扩展类模板
template <typename T>
class Vector<T> : public std::vector<T>
{
public:
void DoSomething()
{
// ...
}
};
我该如何扩展模板类,例如向量?下面的代码不起作用。编译器抱怨'Vector'不是模板。扩展类模板
template <typename T>
class Vector<T> : public std::vector<T>
{
public:
void DoSomething()
{
// ...
}
};
你的语法错了;你需要使用:
template <typename T>
class Vector : public std::vector<T>
这就是说,你不应该通过继承来扩展标准库中的容器,如果没有其他原因,则是因为他们没有虚析构函数,因此它本质上是不安全的。
如果你想“提升” std::vector
,可能会使用成分(即与std::vector
类的成员变量),或使用非成员函数提供您的附加功能。
但是,如果您没有虚拟成员,可以继承STL容器吗? – 2017-01-14 09:44:30
这与扩展另一个类无关。问题是您自己的派生类。
你定义一个类模板是这样的:
template <typename T>
class Vector
{
...
,而不是
template <typename T>
class Vector<T>
{
...
jalfi是对的:class Vector
这是专业化的语法,因此编译器期望看到'Vector'的基本模板。 – UncleBens 2010-04-29 13:31:54
你不应该从标准库容器继承。他们不是为此而设计的。例如,他们没有虚拟析构函数,所以如果你不小心,当你的派生向量被销毁时,你的代码将会中断。 – jalf 2010-04-29 12:51:10