[C++] Functie doorgeven als parameter

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Iska
  • Registratie: November 2005
  • Laatst online: 24-08 21:44

Iska

In case of fire, use stairs!

Topicstarter
Hey allemaal,

Voor een bepaald project moet ik ervoor zorgen dat mensen een functie door kunnen geven aan een andere functie, zodat de doorgegeven functie aangeroepen kan worden wanneer dat nodig is. Ik heb alleen geen flauw idee hoe ik dat voor elkaar kan krijgen :S

Any suggestions?

-- All science is either physics or stamp collecting


Acties:
  • 0 Henk 'm!

  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

gebruik een callback

specifieker dan dat kan ik niet worden op basis van de extreem magere informatie :)

oprecht vertrouwen wordt nooit geschaad


Acties:
  • 0 Henk 'm!

  • Floort
  • Registratie: Mei 2004
  • Laatst online: 26-09 10:40
Je kan altijd een function pointer meegeven als argument.

Acties:
  • 0 Henk 'm!

  • Tofu
  • Registratie: Maart 2003
  • Laatst online: 05-10-2024

Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

functie pointer?

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
typedef void (*functietype)(void);

void a(void)
{
  puts("in a");
}

void b(void)
{
  puts("in b");
}

void call(functietype functie)
{
  functie();
}

int main(int, char **)
{
  call(a);
  call(b);
  return 0;
}

dit werkt alleen voor "gewone" functies, niet voor members van een class (tenzij static)

-niks-


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gebruik std::tr1::function (of boost::function). Kun je ook pointers naar member functions maken en parameters binden.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <functional>

void function()
{
    std::cout << "function()" << std::endl;
}

void functionWithParams(int a, int b)
{
    std::cout << "function(" << a << ", " << b << ")" << std::endl;
}

struct S
{
    void method()
    {
        std::cout << "method" << std::endl;
    }
}

void call(std::tr1::function<void()> func)
{
    func();
}

int main()
{
    call(function);
    call(std::tr1::bind(functionWithParams, 1, 2));

    S s;
    call(std::tr1::bind(&S::method, &s));
}

[ Voor 14% gewijzigd door .oisyn op 13-12-2008 23:48 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Iska
  • Registratie: November 2005
  • Laatst online: 24-08 21:44

Iska

In case of fire, use stairs!

Topicstarter
Arjan schreef op zaterdag 13 december 2008 @ 23:23:
[...]
specifieker dan dat kan ik niet worden op basis van de extreem magere informatie :)
Het was of een lange lijst of een korte uitleg ;), dus vandaar de magere info :P
MLM schreef op zaterdag 13 december 2008 @ 23:26:
functie pointer?

C++:
1
..

dit werkt alleen voor "gewone" functies, niet voor members van een class (tenzij static)
Great! Die zocht ik :D! thx ;)

-- All science is either physics or stamp collecting


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

.oisyn schreef op zaterdag 13 december 2008 @ 23:47:
Gebruik std::tr1::function (of boost::function). Kun je ook pointers naar member functions maken en parameters binden.
C++:
1
...
In geval van member functions zou ik zeker iets als boost gebruiken. Persoonlijk ben ik wel een fan van http://www.codeproject.com/KB/cpp/FastDelegate.aspx Zeker ook een interessant artikel voor mensen die al wat langer met C++ werken. Sneller dan boost, maar mist wel een paar features (zoals argument binding, wat .oisyn hierboven demonstreert)
Jasper91 schreef op zondag 14 december 2008 @ 00:50:
[...]
Great! Die zocht ik :D! thx ;)
Geen probleem ;) Maar zie ook de post van .oisyn, je wilt echt niet met native member functions gaan werken :P *-> operator ftl

[ Voor 50% gewijzigd door MLM op 14-12-2008 09:53 ]

-niks-

Pagina: 1