【发布时间】:2021-06-04 07:45:46
【问题描述】:
void C :: setmethodForC(...)
{
B::setmethod(...);
}
class C: public A, public B
{
public:
void setmethodForC();
.....
}
在上面的代码中,A 和 B 是 C 类使用的两个服务。现在此代码对多个目标有效,并且所有目标都不支持服务 B。所以我需要条件继承,其中服务 B 仅对特定目标启用。为此,我进行了以下更改以禁用在 C 中使用服务 B。
#ifdef B_SUPPORTED
void C :: setmethodForC(...)
{
B::setmethod(...);
}
#endif
class C: public A
#ifdef B_SUPPORTED
, public B
#endif
{
public:
#ifdef B_SUPPORTED
void setmethodForC();
.....
#endif
}
因为编译得很好,但是有没有更好的方法来做到这一点?
【问题讨论】:
-
您应该更具体地说明您的用例。通常我会选择“更喜欢组合而不是继承”,但我不能说这是否适合你,信息太模糊了
-
@Moia 编辑问题了解更多详情。
-
如果功能缺失,您是否有理由添加新方法而不是留空?
-
这是XY problem 的经典例子。请解释你为什么需要这个,因为我确信有更好和更简单的方法来解决你的实际问题。可以按照您的要求进行操作,但是在这种情况下很奇怪,它可以称为高级解决方案(我不想打扰您)。
标签: c++ inheritance