#include <functional>
#include <iostream>
#include <map>
using namespace std;

struct MyClass{
	void a(void*){ cout << "a\n"; }
	void b(void*){ cout << "b\n"; }
	void c(void*){ cout << "c\n"; }
};

int main() {
	map<int, function<void(void*)>> foo;
	map<int, function<void(MyClass&, void*)>> bar;
	MyClass mc;
	
	foo[1] = bind(&MyClass::a, mc, placeholders::_1);
	foo[2] = bind(&MyClass::b, mc, placeholders::_1);
	foo[3] = bind(&MyClass::c, mc, placeholders::_1);
	
	bar[1] = mem_fn(&MyClass::a);
	bar[2] = mem_fn(&MyClass::b);
	bar[3] = mem_fn(&MyClass::c);
	
	for(auto i = 1; i <= 3; ++i) {
		cout << "Foo: ";
		foo[i](nullptr);
		cout << "Bar: ";
		bar[i](mc, nullptr);
	}
}