【发布时间】:2020-07-11 08:12:36
【问题描述】:
我有这个问题。有一个我们开发和使用的框架。我们有一些该框架的用户需要实现的接口。我想确保其中两个接口永远不能在同一个类上实现。这是一个例子
class A{
void a() = 0;
};
class B{
void b() = 0;
};
class C: public A, public B { // This should give error
};
class D: public A{ // OK
};
到目前为止,我认为也许我可以使用 static_assert 和 std::is_convertible,但我无法亲自动手。
编辑: 我不知道谁来编写派生类,所以如果可能的话,我想把它放在基接口中。基本上假设我无法访问派生类,因为它们不在我们的代码库中。
谢谢。
【问题讨论】:
-
“我想确保这两个接口永远不能在同一个类上实现。”如果用户能够做到这一点,那么它在功能上是有效的、有效的和清晰的,那么就没有理由用破坏的界面约定来取笑用户。看起来你想写一个文字冒险!
-
这不是我的设计,我无法更改。我在代码中看到原作者进行了动态转换并给出了最糟糕的运行时错误。我想看看我能不能让它至少变成一个编译时错误
-
动态转换成什么?您不想告诉我他尝试强制转换为所有损坏的接口类,计算数量并在多次发现时抛出错误?不! :-) 谁为改善界面的糟糕程度买单?
-
你看到我正在经历的头痛类型????我很想以一种好的方式解决这个问题,但这不是我目前可以做出的决定,因为代码已经连接到很多地方。而且我还没有告诉你们一半。
-
对我来说,感觉您没有(仅)有技术问题。可能值得去找你的老板,要求更好的团队教育,创建更好的代码指南,参与有益的代码审查,不要遵循学术规则(多重继承是 eval 成语)并投资于软件资本!我相信“改进”坏主意无济于事。