Czy to możliwe, aby utworzyć funkcję szablonu, że trwa zmienną liczbę argumentów, na przykład, w tym konstruktora Vector< T, C >
klasy:C++ szablonu klasy Konstruktor ze zmiennym Argumenty
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);
}
To prawie działa, ale jeśli ktoś dzwoni Vector< double, 3 >(1, 1, 1)
, tylko pierwszy argument ma poprawną wartość. Podejrzewam, że pierwszy parametr jest poprawny, ponieważ jest on rzutowany na double
podczas wywołania funkcji, a pozostałe są interpretowane jako int
s, a następnie bity są wpychane do double
. Wywołanie Vector< double, 3 >(1.0, 1.0, 1.0)
daje oczekiwane rezultaty. Czy istnieje preferowany sposób na zrobienie czegoś takiego?
Zauważ, że uniwersalny składni C++ 11 za inicjatora dasz to w bezpieczny sposób. – sbi