Как вы объявляете указатель функции, который принимает себя в своих параметрах?
Ответ 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);
}