E 'possibile creare una funzione di modello che prende un numero variabile di argomenti, ad esempio, in questo costruttore Vector< T, C >
classe:C++ Template costruttore di classe con argomenti variabili
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);
}
Questo quasi funziona, ma se qualcuno chiama Vector< double, 3 >(1, 1, 1)
, solo il primo argomento ha il valore corretto. Sospetto che il primo parametro sia corretto perché durante il richiamo della funzione viene eseguito il cast a double
e gli altri sono interpretati come int
s e quindi i bit vengono inseriti in un double
. Chiamando Vector< double, 3 >(1.0, 1.0, 1.0)
si ottengono i risultati desiderati. C'è un modo preferito per fare qualcosa di simile?
Si noti che la sintassi di inizializzazione universale C++ 11 di questo vi darà in modo sicuro. – sbi