#include <functional>
#include <iostream>

class Timer
{
	std::function<void()> _f;
public:
	Timer(std::function<void()> && f) : _f(f) {}
	void mach()
	{
		_f();
	}
};

class X
{
public:
	int i;
	void function()
	{
		std::cout << "X: " << i << '\n';
	}
};

void fun()
{
	std::cout << "fun()\n";
}

int main()
{
	X x;
	x.i = 23;
	X x2;
	x2.i = 4711;
	Timer t(std::bind(&X::function, &x));
	Timer t2(std::bind(&X::function, &x2));
	Timer t3(&fun);
	t.mach();
	t2.mach();
	t3.mach();
}
