gpt4 book ai didi

c++ - 用 C++11 编写通用内存函数

转载 作者:IT老高 更新时间:2023-10-28 13:59:24 24 4
gpt4 key购买 nike

正在寻找一种方法来实现一个通用的通用内存函数,该函数将接受一个函数并返回该函数的内存版本?

在 python 中寻找类似@memo(来自 Norving 的网站)的装饰器。

def memo(f):
table = {}
def fmemo(*args):
if args not in table:
table[args] = f(*args)
return table[args]
fmemo.memo = table
return fmemo

更一般地说,有没有办法在 C++ 中表达通用和可重用的装饰器,可能使用 C++11 的新特性?

最佳答案

返回 lambda 的紧凑型:

template <typename R, typename... Args>
std::function<R (Args...)> memo(R (*fn)(Args...)) {
std::map<std::tuple<Args...>, R> table;
return [fn, table](Args... args) mutable -> R {
auto argt = std::make_tuple(args...);
auto memoized = table.find(argt);
if(memoized == table.end()) {
auto result = fn(args...);
table[argt] = result;
return result;
} else {
return memoized->second;
}
};
}

在 C++14 中,可以使用广义返回类型推导来避免返回 std::function 所带来的额外间接性。

完全通用,允许传递任意函数对象而不将它们包装在 std::function 首先留给读者作为练习。

关于c++ - 用 C++11 编写通用内存函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17805969/

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