webForumDet fria alternativet

Callback funktioner i C++

C/C++ur C/C++

2 svar · 271 visningar · startad av Viktor

Medlem sedan aug. 20021 752 inlägg
Frågan#1

Hej

Jag sitter och försöker få en callback funktion att fungera men det går inte.

När jag skriver såhär så fungerar det

class CallBackTest
{
public:
	void test();
	CallBackTest(){};
	~CallBackTest(){};
};

void CallBackTest::test()
{
	mp3_status_callback(Viktor);
	mp3_init();
}

void Viktor()
{
	printf("Test");
}

men jag vill att callback funktionen ska vara en klass funktion, dvs en funktion som hör hemma i klassen CallBackTest. Jag har försökt på lite olika sätt men ännu inte lyckats.

Såhär ser imlementationen av callback funktionen ut

[B][i]sndserver.h[/i][/B]
int mp3_status_callback(void (*callback)(int status));

[B][I]sndmp3.c[/I][/B]
static void* (*status_callback)(int status)=NULL;

/* Set the callback function for status updates */
int mp3_status_callback(void (*callback)(int))
{
	status_callback=callback;
	return 0;
}

/Viktor

Medlem sedan juni 20022 599 inlägg
#2

Funkar det inte om du anger en statisk medlemsfunktion som callback? Icke-statiska medlemsfunktioner har en "this"-pekare som en dold inparameter vilket gör att funktionens signatur inte blir den förväntade.

Du hittar ganska mycket om problemet i fall du söker på "callback function class member" på Google. Det går säkert att trixa sig runt också om man verkligen behöver.

Medlem sedan aug. 20021 752 inlägg
#3

Ibland är man bara för korkad!

Hade glömt att lägga till en parameter i i funktionen... Hade det i min icke medlems funktion som fungerade men inte i den som jag la in i klassen. Men nu fungerar allt som det ska :)

Tack för hjälpen ändå, den sök strängen som du gav ger mycket mer resultat en den som jag försökte med "callback c++"

/Viktor

134 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)