boost:クロージャを作る

萌え。

#include <iostream>
#include <string>

#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/shared_ptr.hpp>

using namespace std;

int count(boost::shared_ptr<int> n) {
  (*n)++;
  return *n;
}

int main() {
  boost::shared_ptr<int> n(new int(0));
  boost::function<int (void)> f = boost::bind(count, n);

  cout << f() << endl;
  cout << f() << endl;
  cout << f() << endl;
  cout << f() << endl;
  cout << f() << endl;

  return 0;
}


1
2
3
4
5
nの生存期間が微妙だなー。
関数オブジェクトはnを参照するのかしらん。
いやいやいや、bindなんだからオブジェクトに保持してるか。