![]() |
1
63
这个问题不常出现。我熟悉的解决方案是由DougMcIlroy设计的,并出现在Bjarne Stroustrup的书中(两本书都有介绍 C++的设计与演化 第12.8条和 C++程序设计语言 第25.6条)。根据中的讨论 设计与发展 有人提议优雅地处理这一具体案件,但被拒绝了,因为“这样的名字冲突不太可能变得足够普遍,不足以保证独立的语言功能”,“不太可能成为新手的日常工作”。
你不仅需要打电话
不漂亮,但决定是不经常需要。 |
![]() |
2
6
在过去,我必须这样做,但是在我的例子中,我需要从一个接口继承两次,并且能够区分对每个接口所做的调用,我使用模板填充程序来帮助我…… 像这样:
然后你就从
你可以做一些更复杂的事情;
请注意,上面没有看到编译器… |
![]() |
3
5
不能单独覆盖它们,必须同时覆盖这两个:
可以使用中间基类模拟单个重写:
此外,您错误地使用了reinterpret_cast,您应该具有:
这里有一个重写 CRTP 这可能是你想要的(或不是):
但请注意,现在不能在realclass上调用名称(使用虚拟调度,例如
|
![]() |
4
3
|
![]() |
5
1
还有两个相关问题几乎(但不是完全)相同: Picking from inherited shared method names . 如果要让rc.name()调用ic1->name()。 或 IC2->名称()。 Overriding shared method names from (templated) base classes .它的语法和代码比您接受的解决方案简单,但是 没有 允许从派生类访问函数。或多或少,除非您需要能够从RC调用name_i1(),否则不需要使用InterfaceHelper之类的东西。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |