【发布时间】:2011-10-06 13:03:32
【问题描述】:
我想知道是否可以创建可调用的凤凰演员并在融合序列中使用它们。 鉴于以下来源:
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;
我想知道是否可以使用 phoenix 摆脱我的 FusionCaller 结构。像这样:
fusion::for_each(fmap, /* some magic phoenix expression*/);
那么凤凰有可能吗?
【问题讨论】:
标签: c++ boost c++11 boost-fusion boost-phoenix