Я вижу, что здесь существует очень близкая Q / A: Итерация по контейнеру unique_ptr
Однако, когда это включает итерацию карты, я не вижу, как избежать копирования / присвоения unique_ptr.
Когда я повторяю карту, например, используя c ++ 17 для простоты, предполагая, что x является публичной переменной-членом типа int для Foo:
map<string, unique_ptr<Foo> > my_map;
for (auto const& [key, val] : my_map) {
val->x = 1;
}
Я получил ошибку:
constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = std::unique_ptr<Foo>]’ is implicitly deleted because the default definition would be ill-formed:
Я вижу еще один пост ( Невозможно перебрать карту, элементы которой содержат uniq_ptr ), выполняя:
map<string, wrapper_struct > my_map;
где wrapper_struct является структурой с unique_ptr внутри. У меня вопрос: есть ли более простые решения?