如何在将POD结构作为变量传递时初始化它?

时间:2013-07-13 07:07:48

标签: c++

例如,我有一个RECT和一个以RECT作为参数的子

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

因为我不需要其他任何地方的RECT有一种方法来初始化它,因为我将它发送到子?像

这样的东西
someSub(RECT {0, 0, somevar1, somevar2}); <- doesnt work :(

哦,你用vs2010编译

2 个答案:

答案 0 :(得分: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(或RECT&)传递给函数。

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

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

它甚至具有相同的语法!但构造函数对我来说有点好看。

答案 1 :(得分: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));

并且结构创建应该由编译器内联。