雖然試圖熟悉boost
,但偶然發現使用boost::function
以及std::vector
的問題。我試圖做一件簡單的事情:有一個與similair簽名功能列表,然後在樣本數據上使用std::for_each
的所有功能。下面是代碼:使用std :: vector <boost :: function> with boost :: bind
typedef boost::function<int (const char*)> text_processor;
typedef std::vector<text_processor> text_processors;
text_processors processors;
processors.push_back(std::atoi);
processors.push_back(std::strlen);
const char data[] = "123";
std::for_each(processors.begin(), processors.end(),
std::cout << boost::bind(&text_processors::value_type::operator(), _1, data)
<< "\n"
);
所以,用for_each
我試着寫到標準輸出將每一個功能採樣數據的結果。但它不會像這樣編譯(有關關於bind
結果缺少運算符<<
的一些長消息)。
如果我刪除流操作符然後我會編譯,但無用的代碼。訣竅是我想在單個for_each
中進行函數應用和文本輸出。我錯過了什麼?認爲這應該是容易的lambda或像這樣,但不能找出正確的解決方案。
感謝您的回覆。使用'std :: transform'的解決方案似乎可以解決這個問題。我試圖把我的頭包裹在一些事實上:'std :: cout << boost :: lambda :: _ 1 <<「\ n」'是一個函子,'boost :: bind(...)'是一個函子。但我仍然沒有辦法將它們合併到一個函子中,將它們傳遞給'std :: for_each'。 – elricbk
我沒有使用boost lambda庫,並且它已經很長時間了,因爲我閱讀了文檔,但是IIRC有一個'boost :: lambda :: bind',它可能在您需要的行中。再次,沒有真正的經驗,你的里程可能會有所不同 –