多态句柄

0 c++

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

class Handle { common data }
class HandleA : Handle { data specific to a }
class HandleB : Handle { data specific to b }
Run Code Online (Sandbox Code Playgroud)

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

void ManagerA::DoSomething(Handle handle)
{
    // needs access to data in handleA
}
Run Code Online (Sandbox Code Playgroud)

有没有涉及铸造的解决方案?

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

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

谢谢

Ale*_*lli 7

正如您所做的那样,按值接收参数:

void ManagerA::DoSomething(Handle handle)
Run Code Online (Sandbox Code Playgroud)

将传递的参数中的任何内容"切掉"超出Handle实例所持有的内容,因此您的handle参数将没有 "额外数据".你绝对需要传递指针或引用(const当然,如果数据不需要修改).

话虽这么说,正常的多态方法涉及在基类中定义虚方法并在子类中适当地覆盖它们.为什么不遵循这样一个完全正常的架构而不是反对 OO方法呢?可能有正当理由(例如在visitor模式上采用某种变体等),但你只是没有解释足够的力量让我们能够沿着这些方向提供帮助; 在提供的信息上,我必须建议"重新架构以使用虚拟方法".