独自の型の関数を引数として取る関数ポインターをtypedefするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/816356

  •  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 (*)());
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top