자체 유형의 함수를 인수로 취하는 함수 포인터를 어떻게 입력 할 수 있습니까?

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

  •  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 (*)());
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top