Digamos que tengo una clase:Inicialización objeto agregado temporal que se utilizan llaves
class Aggregate {
public:
int x;
int y;
};
Sé cómo inicializar un objeto utilizando llaves:
Aggregate a1 = { 1500, 2900 };
pero no puedo encontrar una adecuada sintaxis para crear un objeto temporal y pasarlo como argumento a algún método, por ejemplo:
void frobnicate(const Aggregate& arg) {
// do something
}
//...
frobnicate(Aggregate {1500, 2900}); // what should this line look like?
La manera más fácil sería agregar el constructor a la clase Aggregate, pero supongamos que no tengo acceso al encabezado Aggregate. Otra idea sería escribir algún tipo de método de fábrica, es decir,
Aggregate makeAggregate(int x, int y).
También puede crear un objeto y luego pasarlo como argumento, etc., etc.
Hay muchas soluciones, pero yo' Me da curiosidad si es posible lograr este objetivo usando la inicialización de llaves.
Uh ... Si no tiene acceso al encabezado, no puede suponer que el objeto es posible inicializar con llaves, ¿verdad? – unwind
El enfoque makeXXX no es tan malo, en realidad. Los compiladores recientes pueden aplicar NRVO (optimización del valor de retorno) que conduce a un código eficiente. Cuando se aplica NRVO y la función está en línea, esto sería equivalente a la sintaxis de C++ 0x en términos de eficiencia. – sellibitze