Está buscando la definición c/C++ de una cantidad infinita de argumentos para una función. Se puede ver aquí - http://www.cplusplus.com/reference/cstdarg/va_start/
Una manera fácil de implementar una función tal es así:
1- definir su función, por ejemplo,
void logging(const char *_string, int numArgs, ...)
primer argumento es la cadena que desea utilizar .
El segundo argumento es el número de argumentos infinitos que desea dar. No tiene que usar este parámetro, si desea contar los marcadores de posición en un interruptor (como% d,% f en printf) -Hint: en un bucle, obtenga cada carácter y observe si es su marcador de posición-.
Quiero dar primero un ejemplo de cómo se podría llamar una función de este tipo:
logging("Hello %0. %1 %2 %3", "world", "nice", "to", "meet you"); // infinite arguments are "world", "nice", ... you can give as much as you want
Como se puede ver mis marcadores de posición son números. Puedes usar todo lo que quieras.
2- Hay macros, que inicializa la variable de lista y se pone el valor de un argumento:
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
Si reemplaza cada marcador de posición con los valores de los argumentos infinitos e imprimir la nueva cadena, debería ver esto :
Hello world. un placer conocerte
Espero que ayude ...
OK, pero ¿por qué recuerdo el uso de ...? – Bosak
@Bosak: Así es como se hace en Java (aunque el '...' viene después del nombre del tipo). –
Oh, puede que tengas razón. No sé Java, pero una vez vi un clip sobre algo en Java y dado que se parece mucho a C#, lo confundí. – Bosak