gpt4 book ai didi

c++ - 这个 C++11 代码 (memoize) 有什么作用?

转载 作者:IT老高 更新时间:2023-10-28 22:23:40 26 4
gpt4 key购买 nike

我找到了 an article包含此代码:

template <typename ReturnType, typename... Args>
std::function<ReturnType (Args...)>
memoize(std::function<ReturnType (Args...)> func)
{
std::map<std::tuple<Args...>, ReturnType> cache;
return ([=](Args... args) mutable {
std::tuple<Args...> t(args...);
if (cache.find(t) == cache.end())
cache[t] = func(args...);
return cache[t];
});
}

你能解释一下吗?这里很多东西我看不懂,但最奇怪的是缓存是本地的,不是静态的,但也许我错了……

最佳答案

这是 memoization 的简单 C++1x 实现.

memoize 函数返回 closure .返回值是一个函数,其状态与通过参数传递的状态不同(在本例中为 cache 变量)。

匿名函数中的 [=] 位表示返回的函数应获取所有局部变量的拷贝。 cache 变量不是静态的,因为它旨在在返回函数的调用之间共享。

因此,对 memoize 的每次调用都会返回一个不同的函数以及它自己的 cache。对 memoize 返回的特定闭包的后续调用将从 那个 闭包的 cache 插入/获取值。

您可以认为这在某种程度上相当于更老式的 OOP 版本:

template <typename ReturnType, typename... Args>
class Memoize
{
std::map<std::tuple<Args...>, ReturnType> cache;
public:
ReturnType operator() (Args... args)
{
std::tuple<Args...> t(args...);
if (cache.find(t) == cache.end())
cache[t] = func(args...);
return cache[t];
}
};

关于c++ - 这个 C++11 代码 (memoize) 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5353141/

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