Variadic functions
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вариадические функции — это функции (например, std::printf ), которые принимают переменное количество аргументов .
Чтобы объявить вариативную функцию, многоточие указывается после списка параметров, например, int printf ( const char * format... ) ; , которому может предшествовать необязательная запятая. Смотрите Вариативные аргументы для дополнительной информации о синтаксисе, автоматических преобразованиях аргументов и альтернативах.
Для доступа к вариадическим аргументам из тела функции предоставляются следующие библиотечные средства:
|
Определено в заголовочном файле
<cstdarg>
|
|
|
обеспечивает доступ к аргументам вариативной функции
(функциональный макрос) |
|
|
получает доступ к следующему аргументу вариативной функции
(функциональный макрос) |
|
|
(C++11)
|
создает копию аргументов вариативной функции
(функциональный макрос) |
|
завершает обход аргументов вариативной функции
(функциональный макрос) |
|
|
содержит информацию, необходимую для работы
va_start
,
va_arg
,
va_end
и
va_copy
(определение типа) |
|
Пример
#include <cstdarg> #include <iostream> void simple_printf(const char* fmt...) // C-style "const char* fmt, ..." is also valid { va_list args; va_start(args, fmt); while (*fmt != '\0') { if (*fmt == 'd') { int i = va_arg(args, int); std::cout << i << '\n'; } else if (*fmt == 'c') { // note automatic conversion to integral type int c = va_arg(args, int); std::cout << static_cast<char>(c) << '\n'; } else if (*fmt == 'f') { double d = va_arg(args, double); std::cout << d << '\n'; } ++fmt; } va_end(args); } int main() { simple_printf("dcff", 3, 'a', 1.999, 42.5); }
Вывод:
3 a 1.999 42.5
Смотрите также
|
Документация C
для
Вариативных функций
|