- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在层次结构中有不同类型的句柄。
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/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!