Open apolukhin opened 3 years ago
Базовый класс хранилища, делающий type erasure.
Пример использования:
std::unique_ptr<std::any_storage> var;
// var = 42; // ill formed
// var.emplace(std::in_place<std::mutex>); // no emplace
var = std::make_any_storage(42);
var.reset();
std::lock_guard lock{std::any_cast<std::mutex>(var)};
auto my_var = boost::shared_ptr<std::any_storage>(std::make_any_storage(42)); // 2 allocations
Плюсы:
Минусы:
unique_any
и пользоваться имМикро обсуждение на std-proposals https://lists.isocpp.org/std-proposals/2020/05/1428.php
Добавили функционал в Boost https://www.boost.org/doc/libs/1_83_0/doc/html/boost/anys/unique_any.html
Изначально, std::any позиционировался как безопасная замена
void*
, но что-то пошло не по плану. В С++20 нет возможности поместить в std::any некопируемые типы, например типы содержащие std::unqiue_ptr или std::mutex.Решение - std::unique_any
Отдельный класс
std::unique_any
полностью повторяющий интерфейсstd::any
но без конcтруторов копирования и операторов присвоения от unique_any http://eel.is/c++draft/any.class.generalПример использования:
Плюсы:
Минусы: