es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Modificando objetos sin nombre mediante la semántica de valor-r.

Tengo un método que modifica objetos pasados por referencia:

class MyClass;

MyClass& modify (MyClass& x) { …; return x; }

¿Cuál es la forma correcta de extender modify a objetos sin nombre evitando copias adicionales, de modo que el siguiente código sea válido?

MyClass createMyClass () { … }

MyClass x = modify(createMyClass());

// en lugar de:

MyClass x = createMyClass();
modify(x);

PD: MyClass implementa un movimiento eficiente.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes extender la función modify para objetos sin nombre haciéndola una función de plantilla que tome un T&& (referencia de valor temporal) como argumento:

    template <typename T>
    MyClass& modify (T&& x) { ...; return x; }
    

    De esta manera, modify puede aceptar tanto referencias de valor temporal como de lvalue, y el siguiente código será válido:

    MyClass x = modify(createMyClass());
    

Comments are closed.