Szukasz definicji c/C++ o nieskończonej liczbie argumentów funkcji. można zobaczyć tutaj - http://www.cplusplus.com/reference/cstdarg/va_start/
Łatwym sposobem realizacji takiej funkcji jest tak:
1- zdefiniować swoją funkcję na przykład
void logging(const char *_string, int numArgs, ...)
Pierwszym argumentem jest ciąg chcesz użyć .
Drugi argument to liczba nieskończonych argumentów, które chcesz podać. Nie musisz używać tego parametru, jeśli chcesz policzyć symbole zastępcze w przełączniku (np.% D,% f w printf) -Uwaga: w pętli uzyskaj wszystkie znaki i sprawdź, czy to twój symbol zastępczy-.
chcę dać pierwszy przykład jak można nazwać taką funkcję:
logging("Hello %0. %1 %2 %3", "world", "nice", "to", "meet you"); // infinite arguments are "world", "nice", ... you can give as much as you want
Jak widać moje zastępcze są liczbami. Możesz użyć czegokolwiek, co chcesz.
2- Istnieją makra, które inicjuje zmienną listy i pobiera wartość argumentu:
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
Jeśli zastąpi każdy zastępczy z nieskończonych wartości argumentów i wydrukować nowy ciąg, powinieneś zobaczyć :
Witaj, świecie. Miło cię poznać
Mam nadzieję, że pomaga ...
OK, ale dlaczego pamiętam użycie ...? – Bosak
@Bosak: Tak to się robi w Javie (chociaż "..." pojawia się po nazwie typu). –
Och, może masz rację. Nie znam Javy, ale kiedyś obejrzałem klip o czymś w Javie i ponieważ jest to bardzo podobne do C#, pomyliłem to. – Bosak