¿Es posible crear una plantilla de función que toma un número variable de argumentos, por ejemplo, en este constructor Vector< T, C >
clase:de plantillas C++ Clase constructor con argumentos variables
template < typename T, uint C >
Vector< T, C >::Vector(T, ...)
{
va_list arg_list;
va_start(arg_list, C);
for(uint i = 0; i < C; i++) {
m_data[ i ] = va_arg(arg_list, T);
}
va_end(arg_list);
}
Esto casi funciona, pero si alguien llama Vector< double, 3 >(1, 1, 1)
, solo el primer argumento tiene el valor correcto. Sospecho que el primer parámetro es correcto porque se emite a double
durante la llamada a la función, y que los otros se interpretan como int
sy luego los bits se rellenan en un double
. Llamar al Vector< double, 3 >(1.0, 1.0, 1.0)
da los resultados deseados. ¿Hay una manera preferida de hacer algo como esto?
Tenga en cuenta que la sintaxis de inicializador universales de C++ 11 le dará esto de una manera segura. – sbi