#include <iostream>
#include <string>
#include <functional>
using namespace std;
struct Manager {
string name;
void timeCount(std::function<void(void)> f) {
std::cout << "This is " << name << " manager" << endl;
f();
}
};
void foo() {
cout << "I'm foo" << endl;
}
struct Test {
int x;
void bar() {
cout << "I'm bar " << x << endl;
}
};
int main() {
Manager mgr {"time"};
mgr.timeCount(foo);
Test tst = {234};
mgr.timeCount(std::bind( &Test::bar, tst));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBNYW5hZ2VyIHsKICAgIHN0cmluZyBuYW1lOwogICAgdm9pZCB0aW1lQ291bnQoc3RkOjpmdW5jdGlvbjx2b2lkKHZvaWQpPiBmKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJUaGlzIGlzICIgPDwgbmFtZSA8PCAiIG1hbmFnZXIiIDw8IGVuZGw7CiAgICAgICAgZigpOwogICAgfQp9OwoKdm9pZCBmb28oKSB7Cgljb3V0IDw8ICJJJ20gZm9vIiA8PCBlbmRsOwp9CgpzdHJ1Y3QgVGVzdCB7CglpbnQgeDsKCXZvaWQgYmFyKCkgewoJCWNvdXQgPDwgIkknbSBiYXIgIiA8PCB4IDw8IGVuZGw7Cgl9Cn07CgppbnQgbWFpbigpIHsKCU1hbmFnZXIgbWdyIHsidGltZSJ9OwoJbWdyLnRpbWVDb3VudChmb28pOwoJVGVzdCB0c3QgPSB7MjM0fTsKCW1nci50aW1lQ291bnQoc3RkOjpiaW5kKCAmVGVzdDo6YmFyLCB0c3QpKTsKCXJldHVybiAwOwp9