「C++の基礎 - 構造体」の版間の差分

ナビゲーションに移動 検索に移動
 
266行目: 266行目:
<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
#include <string>
#include <vector>
  #include <optional>
  #include <optional>
   
   
275行目: 277行目:
  };
  };
   
   
  std::vector<HOGE> m_hoges();
  class SomeClass
{
private:
    std::vector<HOGE> m_hoges;
public:
    std::optional<HOGE> getHoge() const
    {
      if (m_hoges.empty()) {
          return std::nullopt;
      }
      return m_hoges[0];
    }
};
   
   
  std::optional<HOGE> getHoge() const
  // 使用例
void someFunction()
  {
  {
     if (m_hoges.empty()) {
    SomeClass obj;
        return std::nullopt;
    auto result = obj.getHoge();
     if (result.has_value()) {
      HOGE hoge = result.value();
      // ...略
    }
    else {
      // データが存在しない場合の処理
      // ...略
     }
     }
    return m_hoges[0];
}
</syntaxhighlight>
<br>
上記の使用例を以下に示す。<br>
<syntaxhighlight lang="c++">
auto result = getHoge();
if (result.has_value()) {
    Hoge hoge = result.value();
    // ...略
}
else {
    // データが存在しない場合の処理
    // ...略
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
または、C++17のif文と構造化束縛を使用して、より簡潔に記述することもできる。<br>
また、C++17のif文と構造化束縛を使用して、より簡潔に記述することもできる。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  if (auto hoge = getHoge(); hoge) {
  if (auto hoge = obj.getHoge(); hoge) {
     // ...略
     // *hogeを使用する処理
  }
  }
  else {
  else {
     // データが存在しない場合の処理
     // データが存在しない場合の処理
    // ...略
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>

案内メニュー