Подтвердить что ты не робот

Типед, который ссылается на себя

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

Как вы объявляете указатель функции, который принимает себя в своих параметрах?

4b9b3361

Ответ 1

Косвенно:

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));
}

Не то, чтобы я мог когда-либо видеть в этом использование, как вы можете видеть из моего примера.

Ответ 2

Вы не можете выразить это в системе типов. Хотя в этом нет ничего принципиально неправильного, это упрощает вещи, устраняя циклы внутри системы типов. Это сильно напоминает мне Аксиома фонда.

Что вы можете сделать, это передать указатель void и применить его к вашему типу:

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

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