例如,我有一个 RECT 和一个以 RECT 作为参数的子
RECT wr = {0, 0, somevar1, somevar2};
someSub(wr);
由于我在其他任何地方都不需要 RECT,有没有办法在我将它发送到潜艇时对其进行初始化?就像是
someSub(RECT {0, 0, somevar1, somevar2}); <- doesnt work :(
哦,你用vs2010编译
例如,我有一个 RECT 和一个以 RECT 作为参数的子
RECT wr = {0, 0, somevar1, somevar2};
someSub(wr);
由于我在其他任何地方都不需要 RECT,有没有办法在我将它发送到潜艇时对其进行初始化?就像是
someSub(RECT {0, 0, somevar1, somevar2}); <- doesnt work :(
哦,你用vs2010编译
我过去所做的是使用构造函数创建子结构:
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;
}
它甚至具有相同的语法!但是对我来说,构造函数的感觉要好一些。
在 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));
并且结构创建应该由编译器内联。