代码之家  ›  专栏  ›  技术社区  ›  Samuel Danielson

如果函数指针将其自身类型的函数作为参数,则如何对其进行typedef?

  •  10
  • Samuel Danielson  · 技术社区  · 16 年前

    例如:一个函数接受一个函数(接受一个函数(那个…)和一个int)和一个int。

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

    它递归地爆炸在 (...) . 是否有一个根本的原因不能这样做,或有其他语法?在我看来,没有石膏是可能的。我真的想传递一个调度表,但是我可以想出来,如果我能传递这个类型。

    2 回复  |  直到 16 年前
        1
  •  10
  •   Dave    16 年前

    可以将函数指针包装在结构中:

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

    我不确定这是否是铸件的改进。我怀疑没有这个结构是不可能的,因为C要求在使用类型之前定义类型,而且typedef没有不透明的语法。

        2
  •  6
  •   Community CDub    8 年前

    这是不可能直接做到的。唯一的选项是使函数指针参数接受未指定的参数,或者接受指向包含函数指针的结构的指针,如 Dave suggested .

    // 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 (*)());