を使用して、一時的な集約オブジェクトを初期化するのは、私はクラスがあるとしましょう:中括弧に
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).
のいくつかの種類を書くことであろう
あり多くのソリューションがありますが、私は」中括弧の初期化を使用してこの目標を達成することが可能かどうか不思議です。
Uh ...ヘッダーにアクセスできない場合は、中括弧を使ってオブジェクトを初期化することはできないと思いますか? – unwind
makeXXXのアプローチはそれほど悪くはありません。最近のコンパイラは、効率的なコードにつながるNRVO(戻り値の最適化)を適用することができます。 NRVOが適用され、関数がインライン化されている場合、これは効率の面でC++ 0xの構文と同等です。 – sellibitze