mwf-utils - utils
mwf-utils - utils
その他ユーティリティ。
mwf_utils
その他ユーティリティ。
prepare_object()
template <class T>
static inline std::unique_ptr<T>& prepare_object(std::unique_ptr<T>& spobj, bool b_construct_if_null = true) {
if (!spobj && b_construct_if_null) {
spobj.reset(new T());
}
return spobj;
}
スマートポインタstd::unique_ptr<>
のオブジェクトを参照します。オブジェクトが構築されていない場合は new T()
により構築します。
get_value_if()
// 関数などから値を得て、その値を用いて処理をすすめる場合
int v = some_func();
if (v != -1) {
// v の値を用いてなにか処理をする
printf("%d", v);
}
// 以下のように書き換える
if (auto x = get_value_if::ne(some_func(), -1)) {
printf("%d", x.value());
}
上記の例のように、関数の戻り値をある条件の場合に利用するときの記述を、if節中の変数宣言を用いて記述するためのユーティリティクラスです。
上記の例では get_value_if::ne()
を用い、1つ目のパラメータは戻り値をもった関数呼び出し、2つ目のパラメータは比較する値を指定します。この場合 some_func()
の戻り値が -1
でない場合に if 節の中が評価されます。1つ目のパラメータと2つ目のパラメータの型は同じでなければなりません。
判定式により eq
, ne
, lt
, le
, gt
, ge
が利用できます。
get_value_if::xx() (T は型) | 判定式 | |
---|---|---|
eq(T lhs, const T rhs) | (lhs == rhs) | 値が同じであれば true |
ne (T lhs, const T rhs) | (lhs != rhs) | 値が違っていれば true |
lt (T lhs, const T rhs) | (lhs < rhs) | 値の比較、より小さい値なら true |
le (T lhs, const T rhs) | (lhs <= rhs) | 値の比較、以下なら true |
gt (T lhs, const T rhs) | (lhs > rhs) | 値の比較、より大きい値なら true |
ge (T lhs, const T rhs) | (lhs >= rhs) | 値の比較、以上なら true |
※ T
は型を示します (template 構文の型パラメータ)