Portál AbcLinuxu, 12. května 2025 04:28
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.