#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);
}
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBNeUNsYXNzewoJdm9pZCBhKHZvaWQqKXsgY291dCA8PCAiYVxuIjsgfQoJdm9pZCBiKHZvaWQqKXsgY291dCA8PCAiYlxuIjsgfQoJdm9pZCBjKHZvaWQqKXsgY291dCA8PCAiY1xuIjsgfQp9OwoKaW50IG1haW4oKSB7CgltYXA8aW50LCBmdW5jdGlvbjx2b2lkKHZvaWQqKT4+IGZvbzsKCW1hcDxpbnQsIGZ1bmN0aW9uPHZvaWQoTXlDbGFzcyYsIHZvaWQqKT4+IGJhcjsKCU15Q2xhc3MgbWM7CgkKCWZvb1sxXSA9IGJpbmQoJk15Q2xhc3M6OmEsIG1jLCBwbGFjZWhvbGRlcnM6Ol8xKTsKCWZvb1syXSA9IGJpbmQoJk15Q2xhc3M6OmIsIG1jLCBwbGFjZWhvbGRlcnM6Ol8xKTsKCWZvb1szXSA9IGJpbmQoJk15Q2xhc3M6OmMsIG1jLCBwbGFjZWhvbGRlcnM6Ol8xKTsKCQoJYmFyWzFdID0gbWVtX2ZuKCZNeUNsYXNzOjphKTsKCWJhclsyXSA9IG1lbV9mbigmTXlDbGFzczo6Yik7CgliYXJbM10gPSBtZW1fZm4oJk15Q2xhc3M6OmMpOwoJCglmb3IoYXV0byBpID0gMTsgaSA8PSAzOyArK2kpIHsKCQljb3V0IDw8ICJGb286ICI7CgkJZm9vW2ldKG51bGxwdHIpOwoJCWNvdXQgPDwgIkJhcjogIjsKCQliYXJbaV0obWMsIG51bGxwdHIpOwoJfQp9