Можно ли создать функцию шаблона, которая принимает переменное количество аргументов, например, в этом конструкторе класса Vector< T, C >
:
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 );
}
Это почти работает, но если кто-то называет Vector< double, 3 >( 1, 1, 1 )
, то только первый аргумент имеет правильное значение. Я подозреваю, что первый параметр является правильным, потому что он выполняется в double
во время вызова функции, а остальные интерпретируются как int
, а затем биты заполняются в double
. Вызов Vector< double, 3 >( 1.0, 1.0, 1.0 )
дает желаемые результаты. Есть ли предпочтительный способ сделать что-то вроде этого?