Вы ищете определение бесконечного числа аргументов c/C++ для функции. Вы можете увидеть здесь - http://www.cplusplus.com/reference/cstdarg/va_start/
простой способ реализовать такую функцию, как то:
1- определить свою функцию, например
void logging(const char *_string, int numArgs, ...)
Первый аргумент является строка, которую вы хотите использовать ,
Второй аргумент - это количество бесконечных аргументов, которые вы хотите дать. Вам не нужно использовать этот параметр, если вы хотите подсчитать заполнители в коммутаторе (например,% d,% f в printf) -Hint: в цикле получить каждый символ и посмотреть, является ли он вашим заполнителем.
Я хочу дать первый пример того, как вы могли бы назвать такую функцию:
logging("Hello %0. %1 %2 %3", "world", "nice", "to", "meet you"); // infinite arguments are "world", "nice", ... you can give as much as you want
Как вы видите, мои заполнители номер. Вы можете использовать все, что хотите.
2- Есть макросы, которые инициализирует список переменных и получает значение аргумента:
va_list arguments; // define the list
va_start(arguments, numArgs); // initialize it, Note: second argument is the last parameter in function, here numArgs
for (int x = 0; x < numArgs; x++) // in a loop
{
// Note : va_arg(..) gets an element from the stack once, dont call it twice, or else you will get the next argument-value from the stack
char *msg = va_arg(arguments, char *); // get "infinite argument"-value Note: Second parameter is the type of the "infinite argument".
... // Now you can do whatever you want - for example : search "%0" in the string and replace with msg
}
va_end (arguments); // we must end the listing
Если заменить каждую пустышку с бесконечными значениями аргумента и напечатать новую строку, вы должны увидеть это :
Hello world. приятно встретиться с вами
Я надеюсь, что помогает ...
Хорошо, но почему я помню использование ...? – Bosak
@Bosak: Вот как это делается на Java (хотя '...' появляется после имени типа). –
О, возможно, вы правы. Я не знаю Java, но однажды я смотрел клип о чем-то на Java, и поскольку он очень похож на C#, я смутил его. – Bosak