13,009
回編集
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]; | |||
} | |||
}; | |||
// 使用例 | |||
void someFunction() | |||
{ | { | ||
if ( | SomeClass obj; | ||
auto result = obj.getHoge(); | |||
if (result.has_value()) { | |||
HOGE hoge = result.value(); | |||
// ...略 | |||
} | |||
else { | |||
// データが存在しない場合の処理 | |||
// ...略 | |||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <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> |