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,因为它有一个构造函数,但它会在传递给函数时被拼接或向下转换为RECT(or )。RECT&

自然地,如果你看它,它与创建一个函数没有什么不同:

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 回答