标题可能不是很具有描述性,但很难用一句话来描述我想要什么。
所以我有一个这样的基类:
class IBase
{
public:
virtual void f(int) = 0;
virtual void f(float) = 0;
}
然后我创建一个抽象类,它只为浮点定义 f:
class HelpBase: public IBase
{
public:
virtual void f(float arg) override
{
f(static_cast<int>(arg));
}
}
我的目标是提供一个抽象类 HelpBase ,然后它将被其他实现 f(int) 的类继承;
在我的 HelpBase 中,我想使用 f(int) ,它在运行时将由这些类之一提供,但我不知道如何调用它。
在上面的示例中,编译器 (gcc) 符合 HelpBase 的“f(int)”未知。
我不能把它写成 IHelpBase::f() 因为它会强制使用 IHelpBase 的纯虚拟成员(gcc 也抱怨)。如何使用在基类中声明但实际上在某些继承类中定义的函数?
如果我使用两个不同的名称,例如 f 代表浮点数和 g 代表整数,则没有问题。然后我可以调用 g(static_cast(arg)); 在我的 HelpBase 中,它按预期工作。