#include <iostream>
#include <list>
#include <algorithm>
#include <functional>
#include <boost/lambda/bind.hpp>

using namespace std;
using namespace boost::lambda;

class Hond {
public:
	virtual ~Hond() {
	}
	virtual void blaf() const =0;
};

class Tekkel: public Hond {
public:
	virtual void blaf() const {
		cout<<"Kef kef ";
	}
};

class StBernard: public Hond {
public:
	virtual void blaf() const {
		cout<<"Woef woef ";
	}
};

int main() {
	list<Hond*> kennel;
	kennel.push_back(new Tekkel);
	kennel.push_back(new StBernard);
	kennel.push_back(new Tekkel);
//  aanroepen van een memberfunctie via mem_fun
	for_each(kennel.begin(), kennel.end(), mem_fun(&Hond::blaf));
	cout<<endl;
//  aanroepen van een memberfunctie via bind
	for_each(kennel.begin(), kennel.end(), bind(&Hond::blaf, _1));
	cout<<endl;
	cin.get();
	return 0;
}

