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.

¿Cómo se puede construir un objeto a partir de un paquete de parámetros en una plantilla de C++?

Dado lo siguiente, ¿cómo puedo construir correctamente un objeto de un tipo desconocido a partir de un paquete de parámetros?

template <typename... types="">
auto foo(Types&&... types) {
    auto result = Types{ }; //¿Cómo se debe hacer esto?
    // Hacer cosas con result
    return result;
}

Espero que la función de plantilla solo se llame con tipos coincidentes, por lo que todo en el paquete de parámetros debería ser del mismo tipo. No importa qué elemento individual use si necesito usar decltype, por ejemplo (el código relevante en la sección comentada provocará errores de compilación de lo contrario).</typename…>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para construir correctamente un objeto de un tipo desconocido a partir del paquete de parámetros, puede usar el siguiente código:

    template<typename... types="">
    auto foo(Types&&... types) {
        auto result = decltype(std::make_tuple(std::forward<types>(types)...)){std::forward<types>(types)...};
        // Haga algo con el resultado
        return result;
    }
    

    Aquí, utilizamos std::make_tuple para crear una tupla a partir del paquete de parámetros y luego inicializamos result con ella utilizando la sintaxis de inicialización con llaves. Esto nos permite construir un objeto de tipo desconocido a partir del paquete de parámetros. El uso de std::forward garantiza que se preserven las referencias y categorías de valor de los argumentos originales.</typename…>

Comments are closed.