Callback funktioner

Tags:    c++ javascript

??

[Redigeret d. 05/10-03 16:28:47 af Jette]



1 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Godt spørgsmål.

I de gamle (og nye) C-dage brugte man pointere til funktioner som man i dag bruger arv og polymorfi:

#include <stdio.h>

struct Hello {
void (*sayHello)();
};

void sayHelloInEnglish() {
printf("Hello World!\\n");
}

void sayHelloInDanish() {
printf("Hej Verden!\\n");
}

int main(int argc, char ** argv) {
struct Hello hello[2];
hello[0].sayHello = sayHelloInEnglish;
hello[1].sayHello = sayHelloInDanish;

hello[0].sayHello();
hello[1].sayHello();

return 0;
}


I C++ ville man nok have gjort noget i denne stil:
#include <iostream>

using std::endl;
using std::cout;

class Hello
{
public:
virtual void sayHello() = 0;
};

class HelloInEnglish : public Hello
{
public:
virtual void sayHello() { cout << "Hello World!" << endl;}
};

class HelloInDanish : public Hello
{
public:
virtual void sayHello() { cout << "Hej Verden!" << endl;}
};

int main(int argc, char ** argv)
{
Hello * hello[2];
hello[0] = new HelloInEnglish();
hello[1] = new HelloInDanish();

hello[0]->sayHello();
hello[1]->sayHello();

delete hello[0];
delete hello[1];

return 0;
}


Callbacks bliver nok mest brugt til event håndtering. F.eks. i en grafisk brugerflade kan du implementere en funktion som skal kaldes når en knap trykkes ned. Så registrerer du din funktion som et callback for knappen. Skide smart faktisk.

Håber det var det du mente...ellers må du prøve at skrive et spørgsmål næste gang

Robert



t