独自の型の関数を引数として取る関数ポインターをtypedefするにはどうすればよいですか?
-
03-07-2019 - |
質問
例:関数(関数(...)および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には不透明な構文がないため、構造なしでは不可能だと思われます。
他のヒント
直接行うことは不可能です。唯一のオプションは、関数ポインター引数に未指定の引数を受け入れるようにするか、関数ポインターを含む構造体へのポインターを受け入れることです(提案されたデイブ。
// 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 (*)());
所属していません StackOverflow