我想遍历一个多图(地图的地图),例如:map<int,map<char, string>>
在 boost hana 的帮助下。Lamba 函数at
不能采用引用类型&map
(编译错误:非常量引用),因此,我无法在多映射中加载或存储元素。
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];
}