2

私が現在取り組んでいるプロジェクトでget_optional_fooは、std::optional を返す次のような多くのコードを書いていることに気づきました。

//...
auto maybe_foo = get_optional_foo(quux, ...)
if (!maybe_foo.has_value())
    return {};
auto foo = maybe_foo.value()
//...
// continue on, doing things with foo...

null オプションを取得した場合、関数から抜け出したい。それ以外の場合は、オプションではない変数を値に割り当てたいと考えています。オプションにプレフィックスを付けるという規則を使い始めましたがmaybe_、オプションに一時的なものをまったく使用する必要がないように、これを行う方法があるかどうか疑問に思っていますか? この変数は、null オプションをチェックし、値があるかどうかを逆参照するためにのみ使用されます。

4

3 に答える 3

1

私が考えることができる最短:

auto maybe_foo = get_optional_foo(quux, ...)
if (!maybe_foo) return {};

auto &foo = *maybe_foo; // alternatively, use `*maybe_foo` below

関数に複数のオプションがあり、それらが空になる可能性が非常に低い場合は、全体を . でラップできますtry - catch

try {
  auto &foo = get_optional_foo(quux, ...).value();
  auto &bar = get_optional_bar(...).value();
  ...
} catch (std::bad_optional_access &e) {
  return {};
}
于 2020-11-11T14:43:55.640 に答える