Como posso typedef um ponteiro de função que leva uma função de seu próprio tipo como um argumento?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Exemplo:. Uma função que leva uma função (que leva uma função (que ...) e um int) e um int

typedef void(*Func)(void (*)(void (*)(...), int), int);

Ela explode de forma recursiva, onde (...). Existe uma razão fundamental isto não pode ser feito ou existe outra sintaxe? Parece-me que deve ser possível sem um elenco. Estou realmente tentando passar um despacho-mesa, mas eu poderia descobrir isso se eu pudesse passar este um tipo.

Foi útil?

Solução

Você pode envolver o ponteiro de função em um struct:

struct fnptr_struct;
typedef void (*fnptr)(struct fnptr_struct *);
struct fnptr_struct {
  fnptr fp;
};

Eu não tenho certeza se isso é uma melhoria em qualidade. Eu suspeito que é impossível sem a struct porque C requer tipos a serem definidas antes de serem usados ??e não há nenhuma sintaxe opaco para typedef.

Outras dicas

É impossível fazer diretamente. Suas únicas opções são para fazer o argumento de ponteiro de função aceitar os argumentos não especificados, ou para aceitar um ponteiro para uma estrutura que contém o ponteiro de função, como Dave sugeriu .

// 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 (*)());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top