Powiedzmy mam klasy:Inicjowanie tymczasowy łączną obiektu za pomocą nawiasów klamrowych
class Aggregate {
public:
int x;
int y;
};
wiem jak zainicjować obiektu przy użyciu nawiasów klamrowych:
Aggregate a1 = { 1500, 2900 };
Ale nie mogę znaleźć właściwego Składnia do utworzenia obiektu tymczasowego i przekazanie go jako argumentu do pewnej metody, na przykład:
void frobnicate(const Aggregate& arg) {
// do something
}
//...
frobnicate(Aggregate {1500, 2900}); // what should this line look like?
Najprostszy sposób byłoby dodać konstruktor do klasy Aggregate, ale załóżmy, że nie mam dostępu do nagłówka Aggregate. Innym pomysłem byłoby napisać jakieś metody fabryki, tj
Aggregate makeAggregate(int x, int y).
mogę również utworzyć obiekt, a następnie przekazać go jako argument itp itd
Istnieje wiele rozwiązań, ale I” Jestem ciekawy, czy można osiągnąć ten cel za pomocą inicjalizacji nawiasów klamrowych.
Uh ... Jeśli nie masz dostępu do nagłówka, nie możesz zakładać, że obiekt można zainicjować za pomocą nawiasów klamrowych w ogóle, prawda? – unwind
Podejście makeXXX nie jest tak złe. Najnowsze kompilatory są w stanie zastosować NRVO (zwaną optymalizacją wartości zwracanej), co prowadzi do wydajnego kodu. Kiedy zostanie zastosowane NRVO, a funkcja zostanie wstawiona, będzie to równoznaczne ze składnią C++ 0x pod względem wydajności. – sellibitze