gpt4 book ai didi

c++ - 缓存的 getter/计算模式|带依赖跟踪的 boost 类

转载 作者:太空狗 更新时间:2023-10-29 21:45:23 27 4
gpt4 key购买 nike

“缓存计算”/“缓存 getter ”是否有通用模式或即用型 boost 类?

我的意思是这样的:

class Test{
public:
Value getValue() const;
protected:
Value calculateValue() const;//REALLY expensive operation.
mutable bool valueIsDirty;
mutable Value cachedValue;
}

Value Test::getValue() const{
if (valueIsDirty){
cachedValue = calculateValue();
valueIsDirty = false;
}
return cachedValue;
}

我可以使用 std::pair<Value, bool>然后转getValue/calculateValue进入宏,但如果值取决于其他值(存储在其他类中)并且这些值也可以被缓存,这并没有真正帮助。

是否有针对这种“模式”的即用型解决方案?目前我手动处理此类缓存值,但这并不“漂亮”。

限制:
C++03 标准。允许 boost 。

最佳答案

Proxy design pattern可以帮忙解决这个问题。

一个典型的实现将定义一个类 ValuePtr表现得像普通的 Value* ,即它有一个重载的 operator->operator* .但不是直接访问底层 Value对象,这些运算符还包含决定加载或重新计算实际值的逻辑。这种额外的间接级别将封装代理逻辑。

如果你需要计算对其他对象的引用,可能是std::shared_ptr<Value>用作 ValuePtr 中的底层数据类型很有用.

参见 this site一个代码示例。 Boost.Flyweight也可能有帮助。

关于c++ - 缓存的 getter/计算模式|带依赖跟踪的 boost 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17722289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com