SigUtil  0.95
Utility modules for modern C++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Maybe

 SigUtilでは,値の取得失敗や無効値が生じる可能性がある関数の返り値として,Maybe型のオブジェクトを返すことで成否を判定できるようにしている.
すなわち,処理が成功していれば返り値から値を取り出すことができ,失敗していれば値を取り出す前に失敗したことを知ることができる.
以下にサンプルコードを示す.

if(auto result = kl_divergence(dist1, dist2)))
{
double kl_value = *result; // or fromJust(result);
}

 SigUtilのMaybeに関する機能は,boost.optionalと補助的な非メンバ関数から構成されており,HaskellのData.Maybeの機能を再現することに加え,C++で扱い易い様に工夫を加えている.
boost.optionalの使用経験がある人は今まで通りの感覚で使用でき,加えてbind演算(maybe_bindop1 , maybe_bindop2 )や簡潔な値の代入(maybe_assignop )などを行えるようになる.

諸々の事情でboost.optionalを使うことができない(<boost/optional.hpp>非使用)場合,Maybeの実体は std::tuple<T, bool>となる(ただし,今後変更の可能性あり).