Я хочу пройти через карту (карта карт), например: map<int,map<char, string>>
с помощью boost hana. Функция lamba at
не может принимать ссылочный тип &map
(ошибка компиляции: ссылка не const), таким образом, я не могу загружать или хранить элементы в multimap.Boost hana fold_left lamba call by reference
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 like I did? Или есть другой способ?
Update 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];
}
Складные последовательность клавиш с 'at' функции вы презентовать вряд ли имеет смысл. Это имеет смысл только в том случае, если последовательность ключей у вас есть '[key1, ..., keyN]' и ваша карта имеет форму 'map >>'. И тогда результат вашего 'fold_left' будет' value', что, вероятно, не так, как вы ожидаете. Следовательно, не могли бы вы объяснить, что вы на самом деле пытаетесь достичь, и, возможно, я мог бы пролить свет на лучший способ сделать это? Вы пытаетесь получить список карт (которые являются значениями внутри мультимары), связанных с каждым ключом в последовательности 'keys'? –
На самом деле я ожидаю, что вы объяснили в своих первых трех предложениях. Таким образом, есть ключи '[key1, ..., keyN]' и карта формы 'map >>' и я хотел бы получить '& value'. Я опубликовал предыдущие решения как обновление выше, но мне нужно использовать кортежи вместо пакетов параметров. Поэтому использование ханы. –
erikzenker
Извините, что неверно истолковал ваш вопрос. См. Мой ответ ниже. –