[英]Overload Base class virtual function from template Derived class
我想要从指针表中访问几个数据。 数据可以是任何类型(例如:int、double、string)。 我创建了一个 Base class 来使用指针,我想派生一个模板 class 来进行打字。
我收到以下消息,但我不知道出了什么问题(即使我有一种强烈的感觉,我误解了很多......):
错误:“virtual double Base::get_value()”不能用“virtual int Base::get_value()”重载
class Base
{
public :
virtual int get_value() = 0;
virtual double get_value() = 0;
};
template <typename T>
class Derived : public Base
{
private :
T m_value;
public :
Derived(T val):Base(), m_value(val) {}
virtual T get_value() { return m_value; }
};
您不能仅根据返回类型重载 function。 因此这是行不通的:
class Base
{
public :
virtual int get_value() = 0;
virtual double get_value() = 0;
};
如果您调用b->get_value()
,则无法消除两者的歧义。
接下来在Derived
中,您可能希望从基中覆盖方法,为此使用关键字override
使您的意图清晰并获得更好的编译器错误::
virtual T get_value() override { return m_value; }
但是,由于Base
中的问题,这也不起作用。 你需要重新考虑你的设计。 派生的 class 必须实现Base
的所有抽象方法才能成为非抽象 class。 您无法选择实施哪一个。
看起来您正在尝试重新实现类似于std::any
或std::variant
的东西。 从头开始实施这两者都不是一件容易的事。 如果您关心自己的实现,那么我建议您看看它们是如何实现的。 如果没有,请使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.