如何扩展模板类,例如vector?以下代码不起作用。编译器抱怨'Vector'不是模板。
template <typename T>
class Vector<T> : public std::vector<T>
{
public:
void DoSomething()
{
// ...
}
};
答案 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>
{
...