我想遍历多Map(Map的Map),例如:map<int,map<char, string>>
在boost hana的帮助下。lambda函数at
不能接受引用类型&map
(编译错误:非常量引用),因此,我无法在多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];
}
1条答案
按热度按时间nbysray51#
我修正了两个妨碍用例正常工作的bug。下面是一个目前在master上工作的最小完整示例: