比方说,我有一个类:使用大括号
class Aggregate {
public:
int x;
int y;
};
我知道如何使用大括号来初始化的对象:
Aggregate a1 = { 1500, 2900 };
但我不能找到一个合适的语法来创建临时对象,并将其传递作为参数传递给一些方法,例如:
void frobnicate(const Aggregate& arg) {
// do something
}
//...
frobnicate(Aggregate {1500, 2900}); // what should this line look like?
最简单的方法会将构造函数添加到Aggregate类,但是让我们假设我没有访问Aggregate标题的权限。另一个想法是写某种工厂方法,即
Aggregate makeAggregate(int x, int y).
我还可以创建一个对象,然后将其作为参数传递,等等,等等
解决方法有很多,但我我只是好奇,如果有可能实现这个目标使用大括号初始化。
呃......如果你没有访问标题,你不能假定对象可以使用大括号初始化,可以吗? – unwind 2009-10-06 12:36:44
实际上,makeXXX方法并没有那么糟糕。最近的编译器能够应用NRVO(命名的返回值优化),从而导致高效的代码。当应用NRVO并且内联函数时,就效率而言,这相当于C++ 0x语法。 – sellibitze 2009-10-06 13:14:20