1 Star 0 Fork 0

fensnote/cosmos

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
cache.hpp 890 Bytes
一键复制 编辑 原始数据 按行查看 历史
qicosmos 提交于 2015-12-07 12:54 . Create cache.hpp
template <typename R, typename... Args>
std::function<R(Args...)> cache(R(*func) (Args...))
{
auto result_map = std::make_shared<std::map<std::tuple<Args...>, R>>();
return ([=](Args... args){
std::tuple<Args...> t(args...);
if (result_map->find(t) == result_map->end())
(*result_map)[t] = func(args...);
return (*result_map)[t];
});
}
template <typename R, typename... Args>
std::function<R(Args...)> sugar(R(*func)(Args...), bool needClear = false)
{
using function_type = std::function<R(Args...)>;
static std::unordered_map<decltype(func), function_type> functor_map;
if (needClear)
return functor_map[func] = cache(func);
if (functor_map.find(func) == functor_map.end())
functor_map[func] = cache(func);
return functor_map[func];
}
/*test code
size_t fibonacci(size_t n)
{
return (n < 2) ? n : sugar(fibonacci2)(n - 1) + sugar(fibonacci2)(n - 2);
}
*/
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/fensnote/cosmos.git
git@gitee.com:fensnote/cosmos.git
fensnote
cosmos
cosmos
master

搜索帮助