![]() |
1
3
如果你不想整堂课,你应该好好读一读 FlyWeight 图案。它是为了节省内存而设计的。 编辑:抱歉,午餐时间暂停;)
这个
在这里,我认为我们可以利用填充来存储id。毕竟,正如你所说的,它将扩展到16位,即使我们只使用其中的9位,所以我们不要浪费其他7位!
请注意,元素的顺序很重要:
模板允许创建一个非常有趣的FlyWeight形式: Boost.Variant .
变体可以保存此处引用的任何类型。可通过“正常”功能进行操作:
可储存在容器中:
最后,操作方法是:
注意到这里的行为非常有趣。出现正常的函数重载解析,因此:
为了应用此访问者,您可以使用
读一下变体,它是最有趣的。
当然,您可以通过定义多个变体来分割代码。如果代码的某些部分只处理4/5类型,则使用特定的变体:) |
![]() |
2
2
在这种情况下,听起来应该简单地使用重载。例如:
如果您为各种类型创建重载,那么您将能够以简单且类型安全的方式调用ShowNiceDialog,但是您仍然能够利用它的优化C变体。 通过上面的代码,C++中可以编写如下的内容:
如果你改变了
编辑
对于那些动态类型,在构建对象时仍然没有太多安全性,但是一旦构建了对象,就有了更安全的机制。将其与typesafe工厂相结合是合理的,这样API的用户就永远不会自己构造DynamicObject类,也就不需要调用不安全的构造函数。 |
![]() |
3
1
我建议解决方案是将类分别存储在每个数据成员的向量中,然后每个类只包含对主类的引用和这些向量的索引。如果主类是一个单体类,那么这可以进一步改进。
当然,这留下了一些需要改进的实现细节,比如Car数据成员的内存管理。然而,Car本身很简单,可以随时创建/销毁,GetSingleton中的向量将非常有效地打包数据成员。 |
![]() |
4
0
这样,无论何时添加要应用的新类型,都不需要更改ShowNiceDialog()。您只需要为新类型专门化DataTypeTraits。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 7 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 7 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 7 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 7 月前 |