std::optional
имеет методvalue_if - обратное значение value_or для std :: optional?
template< class U > constexpr T value_or(U&& default_value) const&;
и все же, он не имеет конструктора
template< class U > optional(bool condition, const U& value);
который просачивается как противоположная вещь. С другой стороны, можно было бы ожидать, что иметь статический метод/с именем конструктора идиомы:
constexpr std::optional<T> value_if(bool condition, const T& value) {
return condition ? nullopt : std::optional(value);
}
Мои вопросы:
- Существует ли концептуальная проблема с
value_if
(в любом из вариантов, которые я перечислил)? - Было что-то вроде предлагаемого, чтобы пойти в стандарт?
Примечание: Я не был уверен, иметь ли const T& value
или const T&& value
.
Я не уверен, я понимаю. В какой момент будет создан живой объект T, если я пройду по ссылке? Я имею в виду, что есть начальный аргумент, который я передаю 'value_if', который является существующим объектом, с которым я передаю ссылку; и есть конструкция в третьем предложении оператора trinary - но это короткозамкнутая логика, так что на самом деле ее не вызывали. Или я чего-то не хватает? – einpoklum
@einpoklum: см. Добавленные примеры. –
Ах, но это точно так же, как 'my_optional.value_or (get_object (...))', который можно заменить на 'auto v = my_optional? my_optional.value: v {} '; – einpoklum