|
1
5
模拟动态绑定(CRTP还有其他用途)适用于 基类 客户 实际上只关心一个特定的派生类。因此,例如,您可能有一些类表示某个平台特定功能的接口,而任何给定的平台只需要一个实现。该模式的目的是对基类进行模板化,这样即使有多个派生类,基类也能在编译时知道哪个派生类在使用。
通过用几个向量替换你的向量,你可能会得到一些加速:一个用于你所知道的每个派生类,另一个用于以后添加新的派生类并且不更新容器时。然后addWidget会做一些(很慢)
这有点混乱,也不是纯粹的面向对象,但如果你的小部件几乎都属于你的容器所知道的类,那么你可能会看到性能的提高。 请注意,如果大多数小部件属于你的容器不可能知道的类(例如,因为它们在不同的库中),那么你不可能有内联(除非你的动态链接器可以内联。我的不能)。您可以通过摆弄成员函数指针来降低虚拟调用开销,但几乎可以肯定的是,收益可以忽略不计,甚至是负的。虚拟调用的大部分开销都在调用本身,而不是虚拟查找,通过函数指针的调用将不会内联。 从另一个角度来看:如果代码要内联,这意味着不同类型的实际机器代码必须不同。这意味着你需要多个循环,或者一个带有开关的循环,因为根据从集合中提取的指针的类型,机器代码在每次通过循环时显然不能在ROM中更改。
|
|
|
2
7
选项3:消除OO OO很有用,因为它有助于管理复杂性,也有助于在面对变化时保持稳定性。对于您所描述的情况——数千个小部件,其行为通常不会改变,其成员方法非常简单——您可能没有太多的复杂性或变化需要管理。如果是这样的话,那么你可能不需要OO。
|
|
3
4
唯一的缺点是,如果向量总是包含相同的元素(即你可以在编译时计算出运行时要执行的内容)。然后,您可以重新工作,但需要除向量之外的其他东西来保存元素(可能是一个将所有元素作为成员的结构)。
此外,您真的认为虚拟调度是一个瓶颈吗?
|
|
|
4
3
你在这里遇到的问题是
这意味着每个
|
|
|
5
3
所有的小部件都需要在同一个容器中吗?你可以做类似的事情
|
|
6
1
很有可能,在你付出所有努力之后,你不会看到任何表现上的差异。 这绝对是 错误的 优化的方法。你不会通过随机更改代码行来修复逻辑错误,对吧?不,那太愚蠢了。在你第一次找到真正导致问题的行之前,你不会“修复”代码。那你为什么要治疗 演出 你需要分析你的应用程序,找出真正的瓶颈在哪里。然后加速该代码并重新运行分析器。重复此操作,直到性能错误(执行速度太慢)消失。 |
|
|
Eris · 纯虚拟成员有什么优势吗(除了他们可能防止的人为错误)? 4 年前 |
|
|
logonmanish · 虚拟com端口在Android上不工作 9 年前 |
|
|
AliS · 使用具有抽象基类指针的映射并调用派生类函数 10 年前 |
|
|
Philip Borgström · Java虚拟游戏板 11 年前 |
|
|
prestokeys · 具有完全可维护性的多重调度解决方案 11 年前 |
|
|
Nick_K · RTSP流到Windows 8上的虚拟视频设备 11 年前 |
|
|
Jay · 基于子类的属性对linq列表排序 12 年前 |
|
|
JLuc5 · C++父类,在两个不同的子类中实现了虚拟方法 12 年前 |