呼び出し可能なフェニックス アクターを作成して、それらをフュージョン シーケンスで使用できるかどうか疑問に思っていました。次のソースを考えると:
struct FusionStruct
{
void Doit() const{std::cout << "Doit" << std::endl;}
};
struct FusionCaller
{
template <typename T> void operator()(T& x) const
{
x.second.Doit();
}
};
int main()
{
typedef boost::fusion::map<boost::fusion::pair<int, FusionStruct> > FusionMap_t;
FusionMap_t fmap(boost::fusion::make_pair<int>(FusionStruct()));
boost::fusion::for_each(fmap, FusionCaller());
return 0;
}
これは期待どおりに機能します。
しかし、次のようにフェニックスでポリモーフィックな呼び出し可能なアクターを作成できるため:
auto p = (boost::phoenix::placeholders::arg1 * boost::phoenix::placeholders::arg1);
// int and double are fine
std::cout << p(2,2) << std::endl;
std::cout << p(2.0,2.0) << std::endl;
フェニックスを使用して FusionCaller 構造体を取り除くことができるかどうか疑問に思っていました。このような:
fusion::for_each(fmap, /* some magic phoenix expression*/);
それで、これはフェニックスでまったく可能ですか?