有人可以告訴我如何使用boost :: phoenix lambda實現以下等價物嗎? 我知道我可以在很多其他方面實現它,但我試圖學習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());
大多數拉姆達的例子,我發現是非常簡單的,不與拉姆達參數調用對象的成員函數尤其是當有更多的處理而不是一個間接的層面。即_1預計代表集合的迭代器,通過解除引用「 - >」返回value_type(正在調用weak_ptr),我想調用它過期。但是因爲_1實際上是而不是是一個迭代器,而是一個「phoenix :: actor」,所以我的解引用不能編譯。
感謝所有的創意投入。
加布
最後,我找到了一個非常相似的例子,並做了以下編譯的更改。 如果這是不正確的,請糾正此問題? 使用boost :: phoenix :: arg_names :: _ 1; XyzWptrSetType :: iterator it = std :: remove_if(xyzWptrSet.begin(),xyzWptrSet.end(), (&_1 - > *&weak_ptr :: expired)())); 還沒有測試過。 –