gpt4 book ai didi

c++ - 多态句柄

转载 作者:太空宇宙 更新时间:2023-11-04 14:43:00 24 4
gpt4 key购买 nike

我在层次结构中有不同类型的句柄。

class Handle { common data }
class HandleA : Handle { data specific to a }
class HandleB : Handle { data specific to b }

大部分代码只处理句柄。但是某些部分(HandleA/HandleB 的“管理器”)需要访问子类中的数据。例如:

void ManagerA::DoSomething(Handle handle)
{
// needs access to data in handleA
}

有没有不涉及转换的解决方案?

到目前为止我的想法:
- 将附加数据保存在 ManagerA/B 的映射中,并使用句柄查找该数据(附加哈希表查找)
- 在调用适当的管理器方法的句柄 (handle.DoSomething()) 中具有多态方法(在每个句柄中需要一个额外的指针)
- 拧紧它并使用铸件

有什么想法吗?我错过了什么吗?

谢谢

最佳答案

按值接收参数,就像您在做的那样:

void ManagerA::DoSomething(Handle handle)

将“切掉”传入参数中超出 Handle 实例所包含内容的任何内容,因此您的 handle 参数将具有NO “额外数据”。您绝对需要通过指针或引用传递(当然,如果不需要修改数据,则可能是 const)。

也就是说,正常的多态方法涉及在基类中定义虚拟方法并在子类中适本地覆盖它们。为什么不遵循这样一个完全正常的架构,而不是反对 OO 方法?可能有正当理由(证明例如在 visitor 模式上采用一些变体等),但您只是没有解释足够的力量让我们能够沿着这些方向提供帮助;根据所提供的信息,我不得不建议“重新设计以使用虚拟方法”。

关于c++ - 多态句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1336070/

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