Skip to content

Instantly share code, notes, and snippets.

@s9gf4ult
Created June 27, 2013 06:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save s9gf4ult/5874327 to your computer and use it in GitHub Desktop.
Save s9gf4ult/5874327 to your computer and use it in GitHub Desktop.
#include <stdio.h>
class Message;
class MoveMessage;
class StopMessage;
class MessageVisitor {
public:
virtual int visit(MoveMessage &msg) = 0;
virtual int visit(StopMessage &msg) = 0;
};
class Message {
public:
virtual int accept(MessageVisitor *visitor) = 0;
};
class MoveMessage: public Message {
public:
int x;
int y;
MoveMessage(int x,int y): x(x), y(y) {
}
virtual int accept(MessageVisitor *visitor) {
return visitor->visit(*this);
}
};
class StopMessage: public Message {
public:
StopMessage() {}
virtual int accept(MessageVisitor *visitor) {
return visitor->visit(*this);
}
};
class AcceptMessage: public MessageVisitor {
public:
AcceptMessage() {};
virtual int visit(MoveMessage &msg) {
printf("Moving to x:%d, y:%d\n", msg.x, msg.y);
return 0;
};
virtual int visit(StopMessage &msg) {
printf("Stopping\n");
return 0;
}
};
int acceptMessage(Message* msg) {
static AcceptMessage vstr;
msg->accept(&vstr);
}
int main (int argc, char** argv) {
MoveMessage m(20, 20);
MoveMessage m2(10, 10);
StopMessage m3;
acceptMessage(&m);
acceptMessage(&m2);
acceptMessage(&m3);
return 0;
}
@sannysanoff
Copy link

int acceptMessage(const Message &msg) {
static AcceptMessage vstr;
Message *msg2 = (Message *)&msg;
msg2->accept(&vstr);
}

int main (int argc, char** argv) {
acceptMessage(MoveMessage(20, 20));
acceptMessage(MoveMessage(10, 10));
acceptMessage(StopMessage());
return 0;
}

Copy link

ghost commented Jun 27, 2013

int acceptMessage(const Message &msg) {
static AcceptMessage vstr;
Message *msg2 = (Message *)&msg;
return msg2->accept(&vstr);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment