Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 缓存设计:基于不可变键的可变实体对象的flyweight_C++_Caching - Fatal编程技术网

C++ 缓存设计:基于不可变键的可变实体对象的flyweight

C++ 缓存设计:基于不可变键的可变实体对象的flyweight,c++,caching,C++,Caching,我的应用程序中有许多不同的屏幕反复引用同一实体/业务对象。 目前,每个屏幕都指向每个对象各自的副本。 此外,实体对象本身可能会公开对其他实体对象的访问,因此会再次创建对象的新副本。 我正试图找到一个缓存解决方案 我正在寻找类似boost::flyweight的产品。 但是,基于不可变键/可变值和引用计数 boost::flyweight<key_value<long, SomeObject>, tag<SomeObject> > object; boost:

我的应用程序中有许多不同的屏幕反复引用同一实体/业务对象。
目前,每个屏幕都指向每个对象各自的副本。
此外,实体对象本身可能会公开对其他实体对象的访问,因此会再次创建对象的新副本。
我正试图找到一个缓存解决方案

我正在寻找类似boost::flyweight的产品。
但是,基于不可变键/可变值和引用计数

boost::flyweight<key_value<long, SomeObject>, tag<SomeObject> > object;
boost::flyweight对象;
以上几乎是完美的。 我正在寻找一个类似的容器,它将提供对SomeObject的可变访问

编辑: 我喜欢flyweight的语法和语义。但是,flyweight只允许const SomeObject&access,没有机会修改对象

Edit2:代码必须在MSVC++6上编译


有什么想法吗?

只要你乐于影响内在状态,那么从它的内部来看,你似乎可以通过一个
const\u cast
逃脱惩罚。如果您有自己的密钥提取程序,您应该确保它不会随着使
x
可变的操作而变化

flyweight<key_value<long, SomeObject> > kvfw(2);
SomeObject &x = const_cast<SomeObject &>(static_cast<const SomeObject&>(kvfw));
flyweight-kvfw(2);
SomeObject&x=const_cast(静态_cast(kvfw));

我认为如果你让飞锤可变,那么它们就不能被合法地称为飞锤。想象一种情况,其中图示符表示为飞锤。如果一个函数更改表示字母“A”的标志符号的代码点,会发生什么情况?另一个在屏幕上呈现字形的函数将尝试绘制“A”,用户可能最终看到“B”或其他东西!我认为您需要引用可变对象的不可变键。然后,考虑使用一个耦合了一些引用计数机制的组件。

“上面几乎完美”-有什么问题吗?flyweight只允许常量访问对象(const SomeObject&)你想让它变为每飞重增加外部信息还是仅仅修改共享的内部信息?我必须能够修改共享的内部信息。键应该保持不变。我必须在MSVC++6上编译,所以boost遇到了一个障碍。我应该把它作为一项要求。这很有效。我在operator->和oprator*中隐藏了演员阵容,我明白你的意思。不过,这不是飞锤的功用吗?是否提供引用计数对象的静态哈希表?我喜欢flyweights的语法,所以我想找到类似的东西。