Ist es möglich, eine Template-Funktion zu erstellen, die eine variable Anzahl von Argumenten, zum Beispiel nimmt, in diesem Vector< T, C >
Klassenkonstruktors:C++ Template-Klasse Constructor mit Variable Argumenten
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);
}
Diese fast funktioniert, aber wenn jemand anruft Vector< double, 3 >(1, 1, 1)
, nur das erste Argument hat den korrekten Wert. Ich vermute, dass der erste Parameter korrekt ist, weil er während des Funktionsaufrufs in eine double
umgewandelt wird und dass die anderen als int
interpretiert werden und dann die Bits in eine double
gestopft werden. Der Aufruf Vector< double, 3 >(1.0, 1.0, 1.0)
gibt die gewünschten Ergebnisse. Gibt es einen bevorzugten Weg, so etwas zu tun?
Beachten Sie, dass universelle initializer Syntax ++ 11 des C werden Sie dies in einer sicheren Weise geben. – sbi