2010-11-17 77 views
3

親愛的一切調用帶部件的數據的成員函數,我想調用一個成員函數(即期望的基準)爲(比方說)一個矢量,即同一類的成員的每個對象,如下面的代碼所示:使用的for_each

#include <functional> 
#include <algorithm> 
#include <vector> 
#include <iostream> 
using namespace std; 

struct Stuff { 
    double x; 
}; 

class Test { 
public: 
    void f1(Stuff & thing); 
    void f2(void); 
    vector<Stuff> things; 
}; 

void Test::f1(Stuff & thing) { 
    ; // do nothing 
} 

void Test::f2(void) { 
    for_each(things.begin(), things.end(), f1); 
} 

int main(void) 
{ 

    return 0; 
} 

此代碼給我相關懸而未決的重載函數類型編譯錯誤。我也嘗試過綁定,但似乎f1中的引用是一個問題。我知道我錯過了一些重要的東西,所以我藉此機會解決我的問題並學習。目前,我無法安裝增強功能,但我想知道增強功能是否有助於解決此問題。提前致謝。

回答

4
  • 要呼叫不能f1簡單地確定,但應該爲&Test::f1被稱爲功能:
  • 功能f1並不需要一個參數(如在成員函數Testf1):任何非靜態成員函數有型Test * const
  • 的隱this參數最後,一個標準的綁定將不能夠做的伎倆,因爲它不處理按引用傳遞參數。

Boost.Bind確實是一個不錯的選擇:

std::for_each(things.begin(), things.end(), boost::bind(&Test::f1, this, _1)); 
+0

感謝。非常清楚。 – iluvatar 2010-11-17 23:03:39

+0

只是想補充一點,你也可以使用C++ 11的'的std :: bind'(等同於Boost.Bind):'的std :: for_each的(things.begin(),things.end(),STD: :bind(&Test :: f1,this,std :: placeholders :: _ 1));' – congusbongus 2013-03-20 04:05:39