En N3059 encontré la descripción de por partes construcción de pares (y tuplas) (y está en la nueva Norma).C++ 11 use-case para piecewise_construct de par y tupla?
Pero no puedo ver cuándo debería usarlo. Encontré discusiones sobre emplace y entidades que no se pueden copiar, pero cuando lo probé, no pude crear un caso en el que I necesitepiecewiese_construct
o podría ver un beneficio en el rendimiento.
Ejemplo. Pensé que necesito una clase que es no copiable, pero movebale (necesario para el avance):
struct NoCopy {
NoCopy(int, int) {};
NoCopy(const NoCopy&) = delete; // no copy
NoCopy& operator=(const NoCopy&) = delete; // no assign
NoCopy(NoCopy&&) {}; // please move
NoCopy& operator=(NoCopy&&) {}; // please move-assign
};
Entonces tipo de esperaba ese par-construcción estándar fallaría:
pair<NoCopy,NoCopy> x{ NoCopy{1,2}, NoCopy{2,3} }; // fine!
pero no fue así. En realidad, esto es lo que esperaba de todos modos, porque "moviendo cosas" en lugar de copiarlo a todas partes en el archivo stdlib, debería ser.
Por lo tanto, no veo ninguna razón por la que debería haber hecho esto, más o menos:
pair<NoCopy,NoCopy> y(
piecewise_construct,
forward_as_tuple(1,2),
forward_as_tuple(2,3)
); // also fine
- Por lo tanto, lo que es un caso de uso del ?
- ¿Cómo y cuándo uso
piecewise_construct
?
Pruebe también deshabilitar el constructor movimiento. –