【发布时间】:2018-05-30 16:05:56
【问题描述】:
我有一个公开可用的接口A,以及一个后端实现类C,如下所示:
struct A
{
virtual void f() = 0;
};
struct C : public A
{
virtual void f() override
{
}
};
我想逐步迁移到新界面B。 B 将具有相同的方法,但是返回类型可能不同。我希望我的实现类同时实现A 和B,以便遗留代码可以继续使用A,直到它被迁移,但是可以使用B 编写新代码。我知道如果我有两个签名完全相同的纯虚方法,我只需要在我的实现类中重写一个。但是如果它们的返回类型不同,我不知道该怎么做......
struct A
{
virtual void f() = 0;
};
struct B
{
virtual int f() = 0;
};
struct C : public A, public B
{
// How do I implement both versions of f() here??
};
【问题讨论】:
-
您不能仅根据返回值重载。您需要给
B::f()提供一组不同的参数,或者将其重命名为其他名称。 -
你没有 - 你,你实现了实现各种
f()的类 D 和 E,然后继承它们。 -
即使你同时拥有两者,
cObj.f()也会模棱两可 -
尝试模板化你的接口,以便相同的接口可以用于不同的数据类型作为返回值
-
假设您正在编写应该通过
C使用B接口的新代码。您希望新代码如何告诉C将使用B接口? (一旦您回答了这个问题:通过使用具有两个接口的单个类,您可以获得什么好处?)
标签: c++ overloading multiple-inheritance pure-virtual