条件演算子で Boost.Optional を返す
覚書。
boost::optional<int> m = cond ? 42 : boost::none;
みたいな感じで boost::none を含めた条件演算子を書きたいんですが、これでは型が違ってしまい、エラーになってしまいます。
と、いうことでこれを回避する場合 boost::make_optional でラップします。
[ソース]
#include <boost/optional.hpp> #include <iostream> boost::optional<int> func(bool cond){ return cond ? boost::make_optional(42) : boost::none; } int main(){ boost::optional<int> m = true ? boost::make_optional(42) : boost::none; auto m1 = func(true); if( m1 ){ std::cout << *m1 << std::endl; } auto m2 = func(false); if( !m2 ){ std::cout << "Nothing" << std::endl; } return 0; }
[出力]
42 Nothing