階乗を求める関数をC++で継続渡しで書いてみる足掻き

今まで何度か書いた継続渡しによる階乗計算。
C++でやってみようと思い立ち、やってみました。
っていうか、慣れてきたとは言え、継続渡し自体まだ理解できてない。
単なる翻訳です。

#include <iostream>
#include <functional>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/lambda/lambda.hpp>

namespace
{
  // 継続渡しで階乗
  int FactCps(int n, boost::function<int(int)> cont)
  {
    return n==0 ?
      cont(1) :
      FactCps(n-1, boost::bind(cont, boost::bind(std::multiplies<int>(), n, _1)));
  }
}

int main()
{
  std::cout << "10! = " << FactCps(10, boost::lambda::_1) << std::endl;
  return 0;
}

実行結果は

10! = 3628800

だそうな。うむ、出来てるんじゃなかろうか。