Est-il possible de créer une fonction de modèle qui prend un nombre variable d'arguments, par exemple, dans ce constructeur de la classe Vector< T, C >
:C++ Modèle Constructeur de la classe avec des arguments 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);
}
Ce presque fonctionne, mais si quelqu'un appelle Vector< double, 3 >(1, 1, 1)
, seul le premier argument a la valeur correcte. Je soupçonne que le premier paramètre est correct car il est converti en double
pendant l'appel de fonction, et que les autres sont interprétés comme int
s, puis les bits sont placés dans un double
. L'appel Vector< double, 3 >(1.0, 1.0, 1.0)
donne les résultats souhaités. Y a-t-il un moyen préféré de faire quelque chose comme ça?
Notez que la syntaxe initialiseur universelle de C++ 11 vous donnera cela d'une manière sûre. – sbi