`std :: any_cast` возвращает копию

Я читал документация для std::any_cast и я нахожу странным, что в API есть приведение, которое либо возвращает значение удерживаемому объекту, либо указатель на него. Почему бы не вернуть ссылку? Копия должна выполняться каждый раз, когда функция вызывается с аргументом без указателя типа.

Я вижу, что указатель версии приведения мог бы сигнализировать о намерениях немного больше и мог бы быть немного более ясным, но почему бы не вернуть возвращаемое значение в виде такой ссылки?

template<typename ValueType>
ValueType& any_cast(any* operand);

вместо

template <typename ValueType>
ValueType* any_cast(any* operand);

Кроме того, кажется, что даже если вы запрашиваете ссылку, приведение удаляет ссылку и возвращает копию хранимого объекта, см. Объяснения возвращаемых значений для перегрузок функций 1-3 здесь. http://en.cppreference.com/w/cpp/utility/any/any_cast

4

Решение

Вы можете увидеть обсуждение стандарта C ++ для этого здесь: https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/ngSIHzM6kDQ

Обратите внимание, что Boost определил any_cast таким образом, более десяти лет, плюс это соответствует static_cast и друзья. Так что если вы хотите ссылку, сделайте это:

any_cast<Foo&>(x)

Так же, как вы сделали бы для старшего _castв C ++.

6

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

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

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