P
Hallo,
nehmen wir mal an ich habe eine Sammlung von Objekten, über die iteriert werden kann. Hier abstrahiere ich das mal durch ein Array von int:
int array[MAXSIZE];
int size
Auf jedes Element kann nun durch eine Apply Funktion eine beliebige Funktion angewendet werden. Die Apply Funktion hat folgende Deklaration:
typedef void (*Apply_Func)(int, va_list args);
void apply(int * array, int size, Apply_Func func, ...);
Die Parameter hinter func sollen an die übergebene Funktion weitergegeben werden. Hier mal ein Beispiel für apply und eine Funktion:
void Func(int a, va_list args) {
int b = va_arg(args, int);
printf("%d\n", a+b);
}
void apply(int * array, int size, Apply_Func func, ...) {
va_list args, nargs;
va_start(args, func);
for (int i = 0; i != size; ++i) {
va_copy(nargs, args);
func(array[i], args);
va_end(nargs);
}
va_end(args);
}
Man könnte das auch so machen:
void Func(int a, va_list args) {
va_list nargs;
va_copy(nargs, args);
int b = va_arg(nargs, int);
printf("%d\n", a+b);
va_end(nargs);
}
void apply(int * array, int size, Apply_Func func, ...) {
va_list args;
va_start(args, func);
for (int i = 0; i != size; ++i) {
func(array[i], args);
}
va_end(args);
}
Nun meine Frage: Ist beides legal,oder wird eines von den beiden von Standard her verboten? So wie ich den Standard lese, geht beides.