首页 > 解决方案 > 在 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);
    }
}

所以,我需要弄清楚一些事情......

  1. 如何将函数传递给 C++ 中的另一个函数或模拟类似的东西。
  2. 扩展运算符...args扩展参数以作为基于索引的条目进行访问。不知道相同的 C++ 等价物。
  3. join操作直接从 args 数组形成一个字符串 -const cacheKey = args.join(',');

我只是在这里放置一对一的映射。我敢肯定 C++ 中可能没有直接的等价物。请建议构建缓存包装器以缓存函数结果的最佳方法!

标签: c++

解决方案


如何将函数传递给 C++ 中的另一个函数或模拟类似的东西。

有几个选项,包括传递函数指针、函数对象等。

扩展运算符...args扩展参数以作为基于索引的条目进行访问。不知道相同的 C++ 等价物。

可变参数、转发等在 C++ 中也可用,语法类似。

join操作直接从 args 数组形成一个字符串 -const cacheKey = args.join(',');

标准中没有这样做的功能,但是很容易想出一个。还有为您提供通用版本的算法头文件,以及新的 C++20 范围以供您使用。


推荐阅读