意外とわかりやすい…と思うんだけど。
#include <iostream> using namespace std; template <class R, class A> class Function { R (*f_)(A); A x_; public: Function(R (*f)(A), A x) : f_(f), x_(x) {} R operator() () { return f_(x_); } }; template <class R, class A> Function<R, A> bind(R (*f)(A), A x) { return Function<R, A>(f, x); } int count(int *n) { return ++(*n); } int main() { int n = 0; Function <int, int *> f = bind(count, &n); cout << f() << endl; // => 1 cout << f() << endl; // => 2 cout << f() << endl; // => 3 }