これは未定のパラメーターを持つ関数ポインターの質問に似ていますが、試してみるとコンパイルエラーが発生します:
エラー: 関数 'accessVariant' への引数が多すぎます
エラー: void 値が無視されないはずです
これを C ファイルの先頭で定義します。
typedef void (*callBackHandler)(void*);
callBackHandler accessVariant= NULL;
私はコールバック登録機能を持っています:
void registerCallbackHandler(callBackHandler ptr_reg_callback)
{
if (ptr_reg_callback == NULL)
{
return;
}
else
{
accessVariant = ptr_reg_callback;
}
}
コード内でブール値をチェックし、特定のタイプのアクセス関数を登録します。
if (bool)
{
registerCallbackHandler((callBackHandler)aRead16);
}
else
{
registerCallbackHandler((callBackHandler)aRead32);
}
aRead16 と aRead32 はそれぞれ、異なる種類の引数を取ります。
それから私は電話をかけます:
(*accessVariant)( (void*)arg1,(void*) arg2, (void*)&value )