gpt4 book ai didi

C++多重继承函数名冲突

转载 作者:太空狗 更新时间:2023-10-29 20:29:25 26 4
gpt4 key购买 nike

上下文:我在工作中讨论 C# 与 Java 时出现了以下问题,我想知道如何(或是否)可以在 C++ 中优雅地解决它。

假设您有两个类 AB (其细节并不重要)然后是两个模板类 GH描述为:

template <typename T>            | template <typename T> 
class G | class H
{ | {
public : | public :
T * foo() ; | virtual T * foo() = 0 ;
// etc. | // etc.
} ; | } ;

然后我们有类 CD描述如下:

class A { /* ... */ } ;
class B { /* ... */ } ;

class C : public G<A>, public G<B>
{
} ;

class D : public H<A>, public H<B>
{
// ???
} ;

我希望能够调用 C方法 foo来自 G<A>和来自 G<B> 的 foo .我希望能够覆盖 D方法 foo来自 H<A>H<B> .

最后,我希望能够像下面的例子一样使用 C 和 D:

C c ;
A * a = c.??? ; (I want to call G<A>::foo())
B * b = c.??? ; (I want to call G<B>::foo())

D d ;
A * a = c.??? ; (I want to call H<A>::foo())
B * b = c.??? ; (I want to call H<B>::foo())

总是有办法做到这一点(我有一些想法),但我对优雅和安全的方法 list 很感兴趣,包括优点/缺点。

那么,你会怎么做呢?

最佳答案

我能想到的两种方式:

C x;

x.G<A>::foo(); // 1
static_cast<G<A>&>(x).foo(); // 2

即:要么显式限定函数的名称,要么在类型层次结构中向上转型。

关于C++多重继承函数名冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9943119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com