例:関数(関数(that ...)とintを受け取る)とintを受け取る関数。
typedef void(*Func)(void (*)(void (*)(...), int), int);
どこで再帰的に爆発し(...)
ます。これができない根本的な理由はありますか、それとも別の構文がありますか?キャストなしでも可能だと私には思えます。私は本当にディスパッチテーブルを渡そうとしていますが、この1つのタイプだけを渡すことができればそれを理解できました。
例:関数(関数(that ...)とintを受け取る)とintを受け取る関数。
typedef void(*Func)(void (*)(void (*)(...), int), int);
どこで再帰的に爆発し(...)
ます。これができない根本的な理由はありますか、それとも別の構文がありますか?キャストなしでも可能だと私には思えます。私は本当にディスパッチテーブルを渡そうとしていますが、この1つのタイプだけを渡すことができればそれを理解できました。
関数ポインタを構造体でラップできます。
struct fnptr_struct;
typedef void (*fnptr)(struct fnptr_struct *);
struct fnptr_struct {
fnptr fp;
};
これがキャスティングの改善かどうかはわかりません。Cでは、使用する前に型を定義する必要があり、typedefの不透明な構文がないため、構造体なしでは不可能だと思います。
直接行うことは不可能です。Daveが提案したように、唯一のオプションは、関数ポインター引数に未指定の引数を受け入れるようにするか、関数ポインターを含む構造体へのポインターを受け入れることです。
// Define fnptr as a pointer to a function returning void, and which takes one
// argument of type 'pointer to a function returning void and taking
// an unspecified number of parameters of unspecified types'
typedef void (*fnptr)(void (*)());