【发布时间】:2013-12-23 09:33:38
【问题描述】:
我正在尝试分析实现多态性的各种方法之间的权衡。我需要一个在成员函数上有一些相似之处和不同之处的对象列表。我看到的选项如下:
- 在每个对象中都有一个标志,在每个函数中都有一个 switch 语句。 该标志的值将每个对象定向到其特定部分 每个功能。
- 在对象中有一个成员函数指针数组,它们是 施工时指定。然后,我将该函数指针称为 获取正确的成员函数。
- 有一个带有多个派生类的虚拟基类。一 这样做的缺点是我的列表现在必须包含指针, 而不是对象本身。
我的理解是,选项 3 中的列表中的指针查找将比选项 2 的成员函数查找花费更长的时间,因为保证成员函数的接近性。
这些选项有哪些优点/缺点?我的首要任务是性能而不是可读性。 还有其他的多态方法吗?
【问题讨论】:
-
1.可怕,2. 稍微不那么可怕,3. 你最好的选择,4. 你需要多态性吗?通常你可以通过使用模板来解决这个问题......
-
“我的首要任务是性能而不是可读性。” - 大错特错。大错特错。即使您需要性能,如果语言已经提供了虚函数(通过多态性——vtables 任何人?),为什么还要手动重新实现虚函数?
-
“我的首要任务是性能而不是可读性。”。在你有权说出这句话之前,你应该学会对代码进行基准测试/分析。
-
上面评论的人。有时性能比可读性更重要,我认为假设他或她还没有分析是不礼貌的。这是一个有效的问题,不要投反对票,因为它与你狭隘的编程世界观相冲突。
-
您没有列出一种既易读又可能比所有 3 种都快的方法:模板。您可能还想查看静态多态性,即 CRTP。
标签: c++ pointers inheritance