有人可以告诉我如何使用 boost::phoenix lambda 实现以下等效项吗?我知道我可以通过许多其他方式实现它,但我正在尝试学习 Phoenix lambda 表达式,到目前为止,我在这个示例中的所有尝试都失败了。
我想要做的是使用 std::remove_if 遍历我的一组 weak_ptrs 并删除过期的。
所以代码看起来像:
typedef std::set<weak_ptr<Xyz>> XyzWptrSetType;
...
XyzWptrSetType xyzWptrSet;
...
XyzWptrSetType::iterator it =
std::remove_if(xyzWptrSet.begin(), xyzWptrSet.end(),
(boost::phoenix::arg_names::_1->expied()));
// the lambda part DOESN'T compile in previous line
std::erase(it, xyzWptrSet.end());
我发现的大多数 lambda 示例都非常简单,并且不涉及在 lambda 参数对象上调用成员函数,尤其是在存在多个间接级别时。即 _1 应该代表集合的迭代器,它通过用“->”取消引用返回 value_type(是weak_ptr),我想在其上调用过期。但是由于 _1 实际上不是直接的迭代器而是“phoenix::actor”,所以我的取消引用不会编译。
提前感谢所有创意投入。
加布