gpt4 book ai didi

c++ - 类设计复杂化(C++)

转载 作者:可可西里 更新时间:2023-11-01 18:28:05 24 4
gpt4 key购买 nike

我的课是

  • 基础
    • Derived_A
    • Derived_B
  • 父级
    • Child_One
    • child _二

Base有两个签名函数:

virtual void foo( const Parent& ) = 0;
virtual void bar( const Base& ) = 0;

,程序的其他部分所期望的。

问题是:

Derived_AChild_OneChild_Two 视为相同。但是 Derived_B 以不同的方式对待它们。

我应该如何实现?

一种方法是找出传递给 Derived_B.foo 的对象类型。这显然是“设计缺陷”。我尝试的另一种方法是将签名函数更改为:

class Base
{
class Derived_A;
class Derived_B;

// virtual void bar( const Base& ) = 0;
virtual void bar( const Derived_A& ) = 0;
virtual void bar( const Derived_B& ) = 0;
}

class Derived_A: public virtual Base
{

virtual void foo( const Parent& ) = 0;
}

class Derived_B: public virtual Base
{
virtual void foo( const Child_A& ) = 0;
virtual void foo( const Child_B& ) = 0;
}

但是现在bar 函数不能使用Base.foo。所以我不得不将 bar 函数写了两次,尽管代码完全一样。

还有其他方法可以解决这个问题吗?你推荐哪一个?

附言我想不出一个好的标题。请随时修改它。

最佳答案

您描述的问题称为 Double Dispatch .该链接描述了问题和一些可能的解决方法(包括多态函数签名和访问者模式)。

关于c++ - 类设计复杂化(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29670418/

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