/      English

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 構文の型パラメータ)