pstade::egg::pipable

ベイダー日記の方更新してから思い出したけど、C++でPipeline operatorのようなことって、pstate::eggで既にやっているのを見たような……。

http://vader.g.hatena.ne.jp/wata_d/20080221/1203583962

探したらありました。

#include <iostream>
#include <pstade/egg/pipable.hpp>
using namespace std;
using namespace pstade::egg;

int one() { return 1; }
int two() { return 2; }

struct print_obj {
  typedef void result_type;

  void operator()(int n) const
  {
    cout << n << endl;
  }
};

result_of_pipable<print_obj>::type const
  print = PSTADE_EGG_PIPABLE_L {} PSTADE_EGG_PIPABLE_R;

int _tmain(int argc, _TCHAR* argv[])
{
  one() | print;
  two() | print;

  return 0;
}

すっきり!