我正在玩Phoenix v3試圖弄清楚我們是否應該標準化而不是當前的綁定和lambda混合。從文檔中我得到的印象是應該可以簡化一些表達式。使用Boost.Phoenix的操作符 - > *
目前,我被困在與STL算法結合使用 - > *運算符。下面將編譯(Visual Studio 2008的SP1),但沒有給出預期輸出:
#include <algorithm>
#include <iostream>
#include <vector>
#include <boost/mem_fn.hpp>
#include <boost/phoenix.hpp>
using namespace std;
using namespace boost;
using namespace boost::phoenix;
using namespace boost::phoenix::arg_names;
struct A
{
void f() const { cout << "A"; };
};
struct B
{
A a() { return A(); };
};
int main()
{
vector<A> va(1);
for_each(va.begin(), va.end(), bind(mem_fn(&A::f), arg1));
for_each(va.begin(), va.end(), arg1->*&A::f);
vector<B> vb(1);
for_each(vb.begin(), vb.end(), bind(mem_fn(&A::f), bind(mem_fn(&B::a), arg1)));
return 0;
}
運行這個例子會打印出「A」兩次,兩次都爲基於BIND的循環。 所以這裏是我的問題:
- 我應該改變,以便讓基於運算符的循環實際調用A :: f?
- 我該如何使用運算符更改雙重綁定循環?
- 任何人都知道爲什麼VS2008總是抱怨,當你沒有在這些情況下指定mem_fn?我總是得到警告C4180(適用於函數類型的限定符沒有意義;忽略)。
在此先感謝您的任何見解。
警告C4180是良性的 - 忽略它在代碼中不是你的。 – ildjarn