typedef bool (*Foo)(Foo a, Foo b);
Kendi parametrelerinde kendini kabul eden bir işlev işaretçisini nasıl bildiriyorsunuz? Dolaylı olarakKendisine başvuran bir yazım hatası
typedef bool (*Foo)(Foo a, Foo b);
Kendi parametrelerinde kendini kabul eden bir işlev işaretçisini nasıl bildiriyorsunuz? Dolaylı olarakKendisine başvuran bir yazım hatası
: Benim örnek gördüğünüz gibi
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));
}
Ben asla o herhangi kullanımını görebiliyordu değil.
Tam olarak sorulan bu değildi, ama muhtemelen gidebildiğin kadar uzak. –
Bunu kullanabilirim, teşekkürler Xeo. – Tergiver
Bunu tür sistemde ifade edemezsiniz. Bu konuda temel olarak yanlış bir şey olmamasına rağmen, tip sistemi içindeki döngüleri ortadan kaldırarak işleri kolaylaştırır. Bu bana Axiom of Foundation'u hatırlatıyor. Yapamazsınız
typedef bool (*Foo)(void* a, void* b);
bool f(void* a, void* b)
{
return ((Foo)a)(a,b);
}
'void *' işaretçisini, bu gibi işlev işaretçilerine alamazsınız. POSIX, void * ptr; FunctionPtrType fptr; * (void **) (& fptr) = ptr; ', tanımlanmamış davranışlardan kaçınmak için. –
@ R.MartinhoFernandes: Uygulamanızın tanımlanmış olduğu doğru. Ama bunu, herhangi bir “von von Neumann” mimarisinde “void *” ve aynı boyuttaki fonksiyon göstergelerini kullanarak yapabilirsiniz. – ybungalobill
Eklemelerin ne kadar fazla eklenme düzeyine sahip olursanız olun, void * 've işlev işaretçileri arasında kolayca yüklenemezsiniz. Bunun yerine başka bir işlev işaretçisi türü kullanın. –
o hiç bitmeyen özyinelemeli tanımı çünkü:
Ne yapabilirsiniz bir boşluk işaretçisi geçmek ve türüne döküm olduğunu. –
@SethCarnegie: argümanınız geçersiz. yapı X {X * a; }; 'kavramsal olarak aynıdır, fakat * izin verilir *. – ybungalobill
@ybungalobill: Hayır, bir işlev türü parametrelerini içerir, sınıf türü üyelerini içermez. – Xeo