#include <iostream>
#include <vector>
#include <functional>
static void fn1(int x, int y)
{
std::cout << x << " " << y << std::endl;
}
static void fn2(int x, int *y, double z)
{
std::cout << x << " " << *y << " " << z << std::endl;
}
static void fn3(const char* x, bool y)
{
std::cout << x << " " << std::boolalpha << y << std::endl;
}
int main()
{
std::vector<std::function<void()>> binds;
int i = 20;
binds.push_back(std::bind(&fn1, 1, 2));
binds.push_back(std::bind(&fn1, 3, 4));
binds.push_back(std::bind(&fn2, 1, &i, 3.99999));
binds.push_back(std::bind(&fn2, 3, &i, 0.8971233921));
binds.push_back(std::bind(&fn3, "test1", true));
binds.push_back(std::bind(&fn3, "test2", false));
for (auto fn : binds) fn();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnN0YXRpYyB2b2lkIGZuMShpbnQgeCwgaW50IHkpCnsKCXN0ZDo6Y291dCA8PCB4IDw8ICIgIiA8PCB5IDw8IHN0ZDo6ZW5kbDsKfQoKc3RhdGljIHZvaWQgZm4yKGludCB4LCBpbnQgKnksIGRvdWJsZSB6KQp7CglzdGQ6OmNvdXQgPDwgeCA8PCAiICIgPDwgKnkgPDwgIiAiIDw8IHogPDwgc3RkOjplbmRsOwp9CgpzdGF0aWMgdm9pZCBmbjMoY29uc3QgY2hhciogeCwgYm9vbCB5KQp7CglzdGQ6OmNvdXQgPDwgeCA8PCAiICIgPDwgc3RkOjpib29sYWxwaGEgPDwgeSA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkKewoJc3RkOjp2ZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBiaW5kczsKCWludCBpID0gMjA7CgoJYmluZHMucHVzaF9iYWNrKHN0ZDo6YmluZCgmZm4xLCAxLCAyKSk7CgliaW5kcy5wdXNoX2JhY2soc3RkOjpiaW5kKCZmbjEsIDMsIDQpKTsKCWJpbmRzLnB1c2hfYmFjayhzdGQ6OmJpbmQoJmZuMiwgMSwgJmksIDMuOTk5OTkpKTsKCWJpbmRzLnB1c2hfYmFjayhzdGQ6OmJpbmQoJmZuMiwgMywgJmksIDAuODk3MTIzMzkyMSkpOwoJYmluZHMucHVzaF9iYWNrKHN0ZDo6YmluZCgmZm4zLCAidGVzdDEiLCB0cnVlKSk7CgliaW5kcy5wdXNoX2JhY2soc3RkOjpiaW5kKCZmbjMsICJ0ZXN0MiIsIGZhbHNlKSk7CgoJZm9yIChhdXRvIGZuIDogYmluZHMpIGZuKCk7Cn0=