引用自身的typedef

时间:2011-12-21 22:14:14

标签: c++

typedef bool (*Foo)(Foo a, Foo b);

如何声明一个在其参数中接受自身的函数指针?

2 个答案:

答案 0 :(得分:8)

间接:

struct Foo{
  typedef bool (*FooPtr)(Foo a, Foo b);
  Foo(FooPtr p)
      : p(p)
  {}

  bool operator()(Foo a, Foo b) const{
    return p(a,b);
  }

  FooPtr p;
};

struct Bar{
    Bar(Foo f)
        : some_callback(f)
    {}

    Foo some_callback;
};

bool a_callback(Foo a, Foo b){
    return false;
}

int main() {
    Bar b(a_callback);
    b.some_callback(Foo(a_callback), Foo(a_callback));
}

从我的例子中可以看出,并非我能看到任何用处。

答案 1 :(得分:2)

您无法在类型系统中表达此信息。虽然在这方面没有任何根本性的错误,但它通过消除类型系统中的循环来简化事情。它强烈地提醒我Axiom of Foundation

你可以做的是传递一个空指针并将其转换为你的类型:

typedef bool (*Foo)(void* a, void* b);

bool f(void* a, void* b)
{
    return ((Foo)a)(a,b);
}