#include <iostream>
#include <functional>

void call_each(int begin, int end, std::function<void(int)> f);

struct test1
{
	void operator()(int i) { std::cout << "[1] " << i << std::endl; }
};

void test2(int i)
{
	std::cout << "[2] " << i << std::endl;
}

int main() {
	call_each( 1, 4, test1() );
	call_each( 4, 7, test2 );
	return 0;
}

void call_each(int begin, int end, std::function<void(int)> f)
{
	for (int i=begin; i<end; ++i)
	{
		f(i);
	}
}

