c++ - 在 C++ 中缓存函数
问题描述
我只熟悉基本的 C++。所以,我不确定是否给了我一个函数f(a, b)
,我需要在它上面构建一个缓存包装器,我该怎么做?缓存包装器将从缓存中返回结果(如果存在),否则将其作为新条目放在那里。
在 Javascript 中,我知道我们可以做一些事情::
function cached(f) {
const cache = new Map();
return function(...args) {
const cacheKey = args.join(',');
if (!cache.has(cacheKey)) {
const value = f(...args);
cache.set(cacheKey, value);
}
return cache.get(cacheKey);
}
}
所以,我需要弄清楚一些事情......
- 如何将函数传递给 C++ 中的另一个函数或模拟类似的东西。
- 扩展运算符
...args
扩展参数以作为基于索引的条目进行访问。不知道相同的 C++ 等价物。 join
操作直接从 args 数组形成一个字符串 -const cacheKey = args.join(',');
我只是在这里放置一对一的映射。我敢肯定 C++ 中可能没有直接的等价物。请建议构建缓存包装器以缓存函数结果的最佳方法!
解决方案
如何将函数传递给 C++ 中的另一个函数或模拟类似的东西。
有几个选项,包括传递函数指针、函数对象等。
扩展运算符
...args
扩展参数以作为基于索引的条目进行访问。不知道相同的 C++ 等价物。
可变参数、转发等在 C++ 中也可用,语法类似。
join
操作直接从 args 数组形成一个字符串 -const cacheKey = args.join(',');
标准中没有这样做的功能,但是很容易想出一个。还有为您提供通用版本的算法头文件,以及新的 C++20 范围以供您使用。
推荐阅读
- html - 为什么我没有写在私有IP上的网站?
- boost - 无效的重载 boost::asio::io_service::run
- javascript - 是否可以在 HighChartJS 中创建分组条形图?
- yii2 - yii2如何查看自己的实体?
- flutter - 在颤动中显示和隐藏弹出窗口
- php - 如何使用 ODBC 通过 PHP 连接 Paradox DB?
- python - Python中有没有办法逐个读取文本文件?
- android - 如何使用 API 提供的颜色以编程方式更改 colorPrimary?
- javascript - Google Content Api for Shopping - 只列出想要的产品功能
- python - Python 3:当本地模块存在同名时导入核心模块?