Boost.Phoenix マニピュレータの実装
Boost.Phoenixのラムダ式は、std::endlなどのIOマニピュレータを使用することができます(Boost.Lambdaではできなかった)。
どうやってるか気になったので実装を覗いてみました。
以下、簡易実装です。
#include <iostream> const struct lambda_t {} lambda = {}; typedef std::ostream& (*omanip_type)(std::ostream&); std::ostream& operator<<(lambda_t x, omanip_type manip) { std::cout << "lambda" << manip; return std::cout; } int main() { lambda << std::endl; }
単に関数ポインタの型を書いてるだけでしたね。
Boost.Phoenixのマニピュレータ対応部分は以下のソースにあります:
boost/phoenix/operator/io.hpp