我的应用中有很多不同的屏幕一遍又一遍地引用相同的实体/业务对象。
目前,每个屏幕都引用每个对象的自己的拷贝。
此外,实体对象本身可能会公开对其他实体对象的访问,再次创建对象的新拷贝。
我正在尝试寻找缓存解决方案。
我正在寻找类似于 boost::flyweight 的东西。
但是,基于不可变键/可变值和引用计数。
boost::flyweight<key_value<long, SomeObject>, tag<SomeObject> > object;
以上几近完美。 我正在寻找一个类似的容器,它将提供对 SomeObject 的可变访问
编辑: 我喜欢享元的语法和语义。然而,flyweight 只允许const SomeObject& 访问,没有机会修改对象。
Edit2:代码必须在 MSVC++6 上编译
有什么想法吗?
最佳答案
只要您乐于影响内在状态,那么就从内部 boost/flyweight/key_value.hpp看起来您可以通过 const_cast
摆脱困境。如果您有自己的 key 提取器,您应该确保它不会随着使 x
可变的操作而改变。
flyweight<key_value<long, SomeObject> > kvfw(2);
SomeObject &x = const_cast<SomeObject &>(static_cast<const SomeObject&>(kvfw));
关于c++ - 缓存设计 : flyweight of mutable entity objects based on an immutable key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1113704/