Я использовал экспериментальный std::optional
какое-то время, и мне было интересно, если такой метод, как std::optional<T>::value_or_default
когда-либо рассматривался. Это даст вам значение, если включен или по умолчанию T
если не. Да легко написать std::optional::value_or( T { } )
но иногда, если T
имеет кучу символов, я не думаю, что это так же ясно, как писать value_or_default
,
Кроме того, такие документы, как n3672, на самом деле не дают веских причин, почему такой метод, как std:optional::is_engaged
не был включен. Я понимаю почему nullopt
полезно в некоторых случаях и был включен, но я думаю, std::optional::is_engaged
понятнее в простых выражениях if.
Вот (минимально протестированная) реализация для вас:
template <typename T>
T value_or_default (const std::experimental::optional<T> &s)
{ return s.value_or(T{}); }
Вставьте это в свою базу кода, и все готово.