( asch | 2020. 11. 30., h - 15:17 )

> akkor valszeg nincs normális megoldás erre

Dehogynem 1: Lérehozol egy rakás függvényt kódgenerátorral, annyit, hogy minden callbacknek másikat tudj adni. Berakod őket egy tömbbe, és onnan használod őket index szerint. Minden fv azzal kezdődik, hogy meghívja a generikus handlert egy indexszel. Az index alapján pedig egy tömbben eléred a hozzá tartozó ojjektumot.

fvpointer [1000] = {fv1, fv2, ...};
ojjekt [1000];

void fv1()
{
 callback(ojjekt[1]);
}
void fv2()
{
 callback(ojjekt[2]);
}
void fv3()
{
 callback(ojjekt[3]);
}
void fv4()
{
 callback(ojjekt[4]);
}
...
static nextIndex = 0;

registerCallback(ojekt)
{
ojjekt[nextIndex]=ojekt;
register(fvpointer[nextIndex++]);
}

Dehogynem 2: Debuggerrel megnézed, hogy mennyivel kell visszalépkedni a stacken, hogy kiolvashass valami azonosítót, hiszen a hívó program tuti, hogy tárol valahol valamit. Beteszed a mágikus konstansokat a programba, és simán kiolvasod az értéket pl így:

void callback()
{
 int dummy;
 int * ptr=dummy+mágikusszám;
 int azonosító=*ptr;
 ...
}

 

Két teljesen normális megoldás is van a problémára :-) Ha többet gondolkodnék talán jönne még hasonló...