В С++ есть функции с переменным числом аргументов. Вот, printf, например
void printf(char* s, ...);
В C++0x теперь будут еще и шаблоны с переменным числом аргументов. В GCC они даже уже есть, в последних версиях, в рамках экспериментальной поддержки С++0x.
Пример, который обычно приводят, когда речь идет о шаблонах с переменным числом аргументов - type-safe printf().
void printf(const char* s) {
while (*s) {
if (*s == '%' && *++s != '%')
throw std::runtime_error("invalid format string: missing arguments");
std::cout << *s++;
}
}
template<typename T, typename... Args>
void printf(const char* s, const T& value, const Args&... args) {
while (*s) {
if (*s == '%' && *++s != '%') {
// ignore the character that follows the '%': we already know the type!
std::cout << value;
return printf(++s, args...);
}
std::cout << *s++;
}
throw std::runtime error("extra arguments provided to printf");
}
Ещё их можно будет использовать, например, для кортежей с переменным числом элементов. То есть
tuple<int, float> - кортеж с двумя элементами
tuple<int, float, string> - кортеж с тремя элементами
и т.д.
Кортежи и сейчас есть в boost, там они реализованы с помощью имеющихся средств.
Также шаблоны с переменным числом аргументов предоставляют интересные возможности для метапрограммирования шаблонов. То есть последователям Александресу есть где порезвиться ;-)
Ссылки по теме:
A Brief Introduction to Variadic Templates[.pdf]
Variadic Templates (Revision 3)[.pdf]
Road to C++0x : Variadic Templates
Variadic Templates for GCC