Сообщение Re[2]: другой Вопрос по стандартному unique_ptr от 19.07.2023 12:01
Изменено 19.07.2023 12:02 Sm0ke
Re[2]: другой Вопрос по стандартному unique_ptr
Здравствуйте, vopl, Вы писали:
V>Можно подменить аргумент для конструктора — передавать туда не сам объект-к-хранению, с тем чтобы впоследствии его двинуть/скопировать в map-node или выкинуть если ключ уже есть, а передавать некую фабрику, которую map активирует только если действительно нужно будет построить новый node. Примерно так:
V>
В мейкер придётся ещё передавать параметры создания объекта, и в нём хранить. Но в целом идея ясна, спасибо
V>Можно подменить аргумент для конструктора — передавать туда не сам объект-к-хранению, с тем чтобы впоследствии его двинуть/скопировать в map-node или выкинуть если ключ уже есть, а передавать некую фабрику, которую map активирует только если действительно нужно будет построить новый node. Примерно так:
V>
V>#include <map>
V>#include <memory>
V>#include <iostream>
V>int main()
V>{
V> std::map<int, std::unique_ptr<int>> map;
V> struct Maker
V> {
V> operator std::unique_ptr<int>()
V> {
V> std::cout << "Maker activated" << std::endl;
V> return std::make_unique<int>(220);
V> }
V> };
V> map.try_emplace(1, Maker{});
V> map.try_emplace(1, Maker{});
V> return 0;
V>}
V>
В мейкер придётся ещё передавать параметры создания объекта, и в нём хранить. Но в целом идея ясна, спасибо
Re[2]: другой Вопрос по стандартному unique_ptr
Здравствуйте, vopl, Вы писали:
V>Можно подменить аргумент для конструктора — передавать туда не сам объект-к-хранению, с тем чтобы впоследствии его двинуть/скопировать в map-node или выкинуть если ключ уже есть, а передавать некую фабрику, которую map активирует только если действительно нужно будет построить новый node. Примерно так:
V>
В мейкер придётся ещё передавать параметры создания объекта, и в нём хранить. Но в целом идея ясна, спасибо
upd: Хотя выглядит как костыль)
V>Можно подменить аргумент для конструктора — передавать туда не сам объект-к-хранению, с тем чтобы впоследствии его двинуть/скопировать в map-node или выкинуть если ключ уже есть, а передавать некую фабрику, которую map активирует только если действительно нужно будет построить новый node. Примерно так:
V>
V>#include <map>
V>#include <memory>
V>#include <iostream>
V>int main()
V>{
V> std::map<int, std::unique_ptr<int>> map;
V> struct Maker
V> {
V> operator std::unique_ptr<int>()
V> {
V> std::cout << "Maker activated" << std::endl;
V> return std::make_unique<int>(220);
V> }
V> };
V> map.try_emplace(1, Maker{});
V> map.try_emplace(1, Maker{});
V> return 0;
V>}
V>
В мейкер придётся ещё передавать параметры создания объекта, и в нём хранить. Но в целом идея ясна, спасибо
upd: Хотя выглядит как костыль)