誰かがboost::phoenixラムダを使用して次の同等のものを実装する方法を教えてもらえますか?他の多くの方法で実装できることはわかっていますが、Phoenixラムダ式を学習しようとしていますが、これまでのところ、この例でのすべての試みは失敗しました。
私がやりたいのは、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());
私が見つけたラムダの例のほとんどは非常に単純であり、特に複数のレベルの間接参照がある場合に、ラムダ引数オブジェクトでメンバー関数を呼び出すことを扱いません。つまり、_1は、「->」で逆参照することにより、expiredと呼びたいvalue_type(weak_ptrである)を返すセットのイテレータを表すことが期待されます。しかし、_1は実際には直接反復子ではなく、「フェニックス::アクター」であるため、間接参照はコンパイルされません。
事前にすべての創造的な入力をありがとう。
ガベ