Boost hana fold_left lambda调用的引用
Boost hana fold_left lambda call by reference
我想在boost hana的帮助下遍历一个multimap (map of maps),例如:map<int,map<char, string>>
。lambda函数at
不能接受引用类型&map
(编译错误:非const引用),因此,我不能在multimap中加载或存储元素。
template <typename T_Map, typename T_Tuple>
auto& traverse(T_Map &map, T_Tuple &keys){
auto at = [](auto &map, auto key) -> auto& {
return map[key];
};
return hana::fold_left(keys, map, at);
}
有可能像我一样用boost::hana解决这个问题吗?还是有别的办法?
更新1:以前没有hana的解决方案需要参数包。但是我需要一个接受键为元组的函数。
template <typename T_Map, typename T, typename... Ts>
auto& traverse(T_Map &map, T key, Ts... keys){
return traverse(map[key], keys...);
}
template <typename T_Map, typename T>
auto& traverse(T_Map& map, T key){
return map[key];
}
我修复了两个阻止你的用例正常工作的错误。这是当前在master上运行的最小完整示例:
#include <boost/hana/at_key.hpp>
#include <boost/hana/fold_left.hpp>
#include <boost/hana/integral_constant.hpp>
#include <boost/hana/map.hpp>
#include <boost/hana/pair.hpp>
#include <boost/hana/range.hpp>
#include <cassert>
namespace hana = boost::hana;
auto at = [](auto& map, auto key) -> auto& {
return map[key];
};
template <typename Map, typename Keys>
auto& traverse(Map& map, Keys const& keys){
return hana::fold_left(keys, map, at);
}
int main() {
auto xs = hana::make_map(hana::make_pair(hana::int_c<0>,
hana::make_map(hana::make_pair(hana::int_c<1>,
hana::make_map(hana::make_pair(hana::int_c<2>,
hana::make_map(hana::make_pair(hana::int_c<3>, 10))))))));
int& i = traverse(xs, hana::range_c<int, 0, 4>);
assert(i == 10);
i = 99;
assert(traverse(xs, hana::range_c<int, 0, 4>) == 99);
}
相关文章:
- 通过引用传递-为什么要调用这个析构函数
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 推理类型如何工作"auto"和按引用调用?
- C++ 通过引用调用函数
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 在 C++20 之前,在带有常量或引用字段的"A"上调用 'std::vector<A>
- 按引用调用与按指针参数调用的差异 前递增和后递增
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 如何在递归函数中调用引用数组?
- 构造函数参数中的引用调用引用的默认构造函数
- C/C++ 通过调用引用或直接释放指针
- 按值调用|引用的另一个问题
- c++从const指针调用引用函数
- 调用引用指针的非托管库函数
- 使用给定框架调用/引用另一个类C++变量或函数