c++ - 缓存设计 : flyweight of mutable entity objects based on an immutable key

标签 c++ caching

我的应用中有很多不同的屏幕一遍又一遍地引用相同的实体/业务对象。
目前,每个屏幕都引用每个对象的自己的拷贝。
此外,实体对象本身可能会公开对其他实体对象的访问,再次创建对象的新拷贝。
我正在尝试寻找缓存解决方案。

我正在寻找类似于 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/

相关文章:

c++ - 代码:: block 如何停止自动标签删除?

c++ - 尝试创建 unique_ptr 时出现错误 C2664

c++ - 错误 : Invalid Use of Incomplete Type 'Class Stack<int>' [enabled by default]

caching - SFENCE和LFENCE对相邻核心的缓存有什么影响?

python - 通用 x64 处理器的 Numba 字节码生成?而不是第一次运行编译 SLOW @njit(cache=True) 参数

c++ - 有人可以帮助这个程序中的错误吗?

C++ 字符串编码 UTF8/unicode

entity-framework - Memcached 可以用作 Entity Framework 6 的第二层缓存吗?

http - "no-cache"与 "max-age=0, must-revalidate, proxy-revalidate"

java - 如何让LoadingCache以非阻塞方式调用load()?