「関数呼び出し元」関数を作成する必要があります。これは、汎用関数ポインター ( void *
) と可変数の引数を引数として受け取り、この関数を呼び出して引数を渡し、戻り値への汎用ポインターを返す必要があります。ただし、このエントリ関数ポインタは、一定数の引数を持つ関数であっても、任意の種類の関数 (戻り値の型を含む) を指す場合があります。次のようになります。
void * function_caller(void * function_pointer, ...) {
void * returning_value;
// Call the function and get the returning value
return returning_value; // this returning value will be properly casted outside
}
このようにして、次のコードが機能します。
int function1(int a, char b) {
// ...
}
void function2(float c) {
// ...
}
float function3() {
// ...
}
int main() {
int v1;
float v3;
v1 = *(int *) function_caller((void *) &function1, 10, 'a'); // Which would be equivalent to v1 = function1(10, 'a');
function_caller((void *) &function2, 3.0); // Which would be equivalent to function2(3.0);
v3 = *(float *) function_caller((void *) &function3); // Which would be equivalent to v3 = function3();
return 0;
}
を使用する必要があることはわかっていますがva_list
、引数を渡すポインターによって関数を呼び出す方法がわかりません。
それで、皆さん、何か考えはありますか?