セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2025-08-08 現在

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