0

たとえば、RECTと、RECTをパラメーターとして持ついくつかのサブがあります

RECT wr = {0, 0, somevar1, somevar2};
someSub(wr);

私はRECTを他のどこにも必要としないので、サブに送信するときに初期化する方法はありますか? 何かのようなもの

someSub(RECT {0, 0, somevar1, somevar2}); <- doesnt work :(

ああ、vs2010 を使用してコンパイルします

4

2 に答える 2

1

私が過去に行ったことは、コンストラクターを使用してサブ構造体を作成することです。

struct Rect : RECT
{
    Rect(long l, long t, long r, long b)
    {
        left   = l;
        top    = t;
        right  = r;
        bottom = b;
    }
};

someSub(Rect(a, b, c, d));

コンストラクターがあるため、Rectそれ自体は POD ではありませんが、関数に渡すときに(または) にスプライシングまたはダウンキャストされます。RECTRECT&

当然、これを見ると、関数を作成するのと同じです。

RECT Rect(long l, long t, long r, long b)
{
    RECT r = {l, t, r, b};
    return r;
}

構文も同じです!しかし、コンストラクターのほうがいくらか気分が良くなります。

于 2013-07-13T07:20:52.103 に答える
1

C++11 では、呼び出しで構造体をインライン化できます。

func({0, 0, somevar1, somevar2});

C/C++ の古いバージョンでは、構造体を初期化して結果を返すヘルパー関数を作成できます。

inline RECT new_RECT(int a, int b, int c, int d)
{
    RECT ret = {a, b, c, d};
    return ret;
}

次に、次のように呼び出すことができます。

func(new_RECT(a, b, c, d));

構造体の作成は、コンパイラによってインライン化される必要があります。

于 2013-07-13T07:25:50.330 に答える