#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;
}