자체 유형의 함수를 인수로 취하는 함수 포인터를 어떻게 입력 할 수 있습니까?
-
03-07-2019 - |
문제
예 : 함수 (함수 (그 ...) 및 int를 취하는 함수와 int를 취하는 함수.
typedef void(*Func)(void (*)(void (*)(...), int), int);
그것은 어디에서 재귀 적으로 폭발합니다 (...)
. 이것이 할 수없는 근본적인 이유가 있습니까? 아니면 다른 구문이 있습니까? 캐스트 없이는 가능해야합니다. 나는 정말로 디스패치 테이블을 전달하려고 노력하고 있지만이 유형을 전달할 수 있는지 알아낼 수 있습니다.
해결책
기능 포인터를 구조물로 랩핑 할 수 있습니다.
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