Click on coroute.cpp to get source.
// Co-routines in C++ using pointers to members
// See main() first
// Programmer: Dmitriy Morozov (foxcub@foxcub.org)
#include <iostream>
using namespace std;
class A
{
private:
//typedef of the pointer to the routine
typedef void (A::* fType) ();
//The pointer to which part of the routine is actually going to be called
fType fPointer;
public:
//Constructor initializes the pointer, so that the first time the function is called
//the first part is executed
A()
{
fPointer = &A::f_1;
}
//The actual function we are going to be calling each time (see main)
inline void f()
{
(this->*fPointer) ();
}
//Part 1 of the co-routine
void f_1()
{
cout << "f_1() is called." << endl;
fPointer = &A::f_2;
}
//Part 2 of the co-routine
void f_2()
{
cout << "f_2() is called." << endl;
fPointer = &A::f_3;
}
//Part 3 of the co-routine
void f_3()
{
cout << "f_3() is called." << endl;
}
};
int main(void)
{
A myA;
//f_1() is called
myA.f();
//f_2() is called
myA.f();
//f_3() is called
myA.f();
//f_3 was our last function in the series so it's called again,
//this behavior obviously could be altered
myA.f();
}