使用花括号初始化临时聚合对象

cha*_*lup 5 c++ constructor aggregate initialization curly-braces

假设我有一节课:

class Aggregate {

public:

    int x;
    int y;

};
Run Code Online (Sandbox Code Playgroud)

我知道如何使用花括号初始化对象:

Aggregate a1 = { 1500, 2900 };
Run Code Online (Sandbox Code Playgroud)

但我找不到合适的语法来创建临时对象并将其作为参数传递给某个方法,例如:

void frobnicate(const Aggregate& arg) { 
    // do something
}

//...

frobnicate(Aggregate {1500, 2900}); // what should this line look like?
Run Code Online (Sandbox Code Playgroud)

最简单的方法是将构造函数添加到Aggregate类,但我们假设我没有访问Aggregate头的权限.另一个想法是写一些工厂方法,即

Aggregate makeAggregate(int x, int y).
Run Code Online (Sandbox Code Playgroud)

我也可以创建一个对象,然后将其作为参数传递等.等.

有很多解决方案,但我只是好奇是否可以使用花括号初始化来实现这个目标.

Ale*_*x B 8

你想要的是C++ 0x初始化列表.

class Aggregate {
public:
    int x, y;
};

void frobnicate(const Aggregate& arg) {

}

int main() {
    frobnicate({1, 2});
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC 4.4已通过-std=c++0x标志支持此功能.可能VS2010 CTP也支持这个(如果我错了,请纠正我).

使用C++ 98/C++ 03,您将不得不编写和调用构造函数.