Portál AbcLinuxu, 6. listopadu 2025 00:49
void function ( double fcn ( double x[]), int n);
a já potřebuji, aby jako ta "fcn" byla volána funkce z mé třídy, dejme tomu
class A{
public:
double* data;
double my_fcn ( double x[]);
};
kde my_fcn potřebuje přistupovat k atributům data, takže nemůže být static. Máte někdo nápad, jak by to šlo propojit? Půjde to přes nějaký wrapper nebo to prostě propojit nejde?
Řešení dotazu:
Ten prototyp, který uvádíte, je nějaký zkomolený, ale jestli dobře chápu, o co se snažíte, tak to takhle přímo nepůjde. Ta funkce function() očekává, že jí předáte adresu nějaké funkce, kterou v případě potřeby zavolá. Ta funkce pak dostane jen ty parametry, které jsou uvedeny (pointer na pole a nejspíš ještě délku (pokud máte špatně závorky)), ale ne žádný pointer nebo referenci na instanci třídy A. Pokud by tedy ta funkce měla dělat pro každou instanci třídy A něco jiného, musela by být pro každou instanci třídy A jinde, což samozřejmě nechcete.
To, že to při klasickém volání metody funguje, je dáno tím, že metoda de facto dostává skrytý parametr this, se kterým pak může pracovat. Překladač pak tento skrytý parametr k voláním metod automaticky přidává.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.