1

我已经使用实验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 表达式更清楚。

4

1 回答 1

1

这是为您提供的(经过最少测试的)实现:

template <typename T>
T value_or_default (const std::experimental::optional<T> &s)
{ return s.value_or(T{}); }

把它放在你的代码库中,你就完成了。

于 2015-05-01T20:18:45.620 回答