template <int i, int j, class F> class For {
F f;
public:
For(F f) : f(f) { }
void operator () (void) const {
f();
For<i + 1, j, F> g(f);
g();
}
};

template <int i, class F> class For<i, i, F> {
F f;
public:
For(F f) : f(f) { }
void operator () (void) const { }
};

class F { public: void operator () (void) const { std::cout << "Hello" << std::endl; } };

int main(void) {
F f;
For<0, 2, F> g(f); // [0, 2)
g();
return 0;
}

こんなん?