#include <iostream>
using namespace std;
struct triple_caller
{
typedef void (*callback_type)(int index, void* param);
callback_type callback;
void* param;
triple_caller(callback_type callback, void* param) : callback(callback), param(param) { }
void call()
{
callback(0, param);
callback(1, param);
callback(2, param);
}
};
struct my_proc_param
{
string msg;
};
void my_proc(int index, void* param)
{
my_proc_param* p = static_cast<my_proc_param*>(param);
cout << "#" << index << " " << p->msg << endl;
}
int main()
{
my_proc_param ap, bp;
ap.msg = "Привет";
bp.msg = "Тяночку бы";
triple_caller a(my_proc, &ap), b(my_proc, &bp);
a.call();
b.call();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHRyaXBsZV9jYWxsZXIKewoJdHlwZWRlZiB2b2lkICgqY2FsbGJhY2tfdHlwZSkoaW50IGluZGV4LCB2b2lkKiBwYXJhbSk7CgljYWxsYmFja190eXBlIGNhbGxiYWNrOwoJdm9pZCogcGFyYW07CgoJdHJpcGxlX2NhbGxlcihjYWxsYmFja190eXBlIGNhbGxiYWNrLCB2b2lkKiBwYXJhbSkgOiBjYWxsYmFjayhjYWxsYmFjayksIHBhcmFtKHBhcmFtKSB7IH0KCgl2b2lkIGNhbGwoKQoJewoJCWNhbGxiYWNrKDAsIHBhcmFtKTsKCQljYWxsYmFjaygxLCBwYXJhbSk7CgkJY2FsbGJhY2soMiwgcGFyYW0pOwoJfQp9OwoKc3RydWN0IG15X3Byb2NfcGFyYW0KewoJc3RyaW5nIG1zZzsKfTsKCnZvaWQgbXlfcHJvYyhpbnQgaW5kZXgsIHZvaWQqIHBhcmFtKQp7CglteV9wcm9jX3BhcmFtKiBwID0gc3RhdGljX2Nhc3Q8bXlfcHJvY19wYXJhbSo+KHBhcmFtKTsKCWNvdXQgPDwgIiMiIDw8IGluZGV4IDw8ICIgIiA8PCBwLT5tc2cgPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7CglteV9wcm9jX3BhcmFtIGFwLCBicDsKCWFwLm1zZyA9ICLQn9GA0LjQstC10YIiOwoJYnAubXNnID0gItCi0Y/QvdC+0YfQutGDINCx0YsiOwoKCXRyaXBsZV9jYWxsZXIgYShteV9wcm9jLCAmYXApLCBiKG15X3Byb2MsICZicCk7CglhLmNhbGwoKTsKCWIuY2FsbCgpOwoKCXJldHVybiAwOwp9