Почему для std :: any нет unsafe_any_cast?

Моя локальная версия заголовков Boost (1.56.0) имеет следующие функции, определенные в boost/any.hppКопия дословно:

// Note: The "unsafe" versions of any_cast are not part of the
// public interface and may be removed at any time. They are
// required where we know what type is stored in the any and can't
// use typeid() comparison, e.g., when our types may travel across
// different shared libraries.
template<typename ValueType>
inline ValueType * unsafe_any_cast(any * operand) BOOST_NOEXCEPT
{
return &static_cast<any::holder<ValueType> *>(operand->content)->held;
}

template<typename ValueType>
inline const ValueType * unsafe_any_cast(const any * operand) BOOST_NOEXCEPT
{
return unsafe_any_cast<ValueType>(const_cast<any *>(operand));
}

Хотя онлайн-документация даже не подтверждает их существование: http://www.boost.org/doc/libs/1_59_0/doc/html/any/reference.html

Я заметил, что std::any также, кажется, не имеет поддержки небезопасного броска.

Почему стандарт C ++ 17 не вводит std::unsafe_any_cast?

Если точная причина не может быть найдена (или если она просто никогда не была предложена), какие будут наиболее убедительные аргументы, чтобы не обеспечить небезопасный доступ к значению, хранящемуся в std::any объект?

2

Решение

std::any это типобезопасный Контейнер для отдельных значений любого типа.

Обратите внимание на комментарий в фрагменте, который вы разместили, что Boost’s unsafe_any_cast является не часть публичного интерфейса. Это деталь реализации, и она не предназначена для использования конечным пользователем. Вот почему это не упоминается в документации.

Продвижение его в общедоступный интерфейс нарушило бы цель, прежде всего, создать контейнер с безопасным типом.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]