#include <iostream>
#include <loki/Visitor.h>
using namespace std;
using namespace Loki;
class character : public BaseVisitable<>
{
public:
LOKI_DEFINE_VISITABLE()
};
class enemy : public character
{
public:
LOKI_DEFINE_VISITABLE()
};
class friendly : public character
{
public:
LOKI_DEFINE_VISITABLE()
};
class next_move :
public BaseVisitor, public Visitor<friendly>, public Visitor<enemy>
{
public:
void Visit(enemy&) {cout << "try to find friendly character" << endl;}
void Visit(friendly&) {cout << "try to find enemy" << endl;}
};
class die :
public BaseVisitor, public Visitor<friendly>, public Visitor<enemy>
{
public:
void Visit(enemy&) {cout << "enemy died" << endl;}
void Visit(friendly&) {cout << "friendly died" << endl;}
};
int main()
{
friendly f;
enemy e;
next_move m;
f.Accept(m);
e.Accept(m);
die d;
f.Accept(d);
e.Accept(d);
return 0;
}