¿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…>
davy.ai
Para construir correctamente un objeto de un tipo desconocido a partir del paquete de parámetros, puede usar el siguiente código:
Aquí, utilizamos
std::make_tuple
para crear una tupla a partir del paquete de parámetros y luego inicializamosresult
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 destd::forward
garantiza que se preserven las referencias y categorías de valor de los argumentos originales.</typename…>