Увы, сейчас нет хорошего способа сделать это. Большинство пакетов Boost, которые должны выполнять что-то подобное, используют трюки макросов для определения таких вещей:
template < typename T >
Vector< T >::Vector( T )
{ ... }
template < typename T, uint C >
Vector< T, C >::Vector( T t, C c1 )
{ ... }
template < typename T, uint C >
Vector< T, C >::Vector( T t, C c1, C c2 )
{ ... }
template < typename T, uint C >
Vector< T, C >::Vector( T t, C c1, C c2, C c3 )
{ ... }
Макросы генерируют несколько версий набора (обычно около 10) и предоставляют механизм для изменения максимального количества параметров перед расширением конструкции.
По сути, это реальная проблема, поэтому C ++ 0x вводит аргументы шаблона переменной длины и методы делегирования, которые позволят вам сделать это чисто (и безопасно). Тем временем вы можете сделать это с помощью макросов или попробовать компилятор C ++, который поддерживает (некоторые из) эти новые экспериментальные функции. GCC хорош для этого.
Имейте в виду, что поскольку C ++ 0x на самом деле еще не выпущен, все еще может измениться, и ваш код может не синхронизироваться с окончательной версией стандарта. Кроме того, даже после выхода стандарта в течение примерно пяти лет многие компиляторы будут поддерживать стандарт лишь частично, поэтому ваш код не будет очень переносимым.