2014-02-20 87 views
1

我搜索過了,但找到的最接近的link甚至與我的問題不符。 我有一個std::vector<double> mydata數組。我喜歡在調用成員函數時使用for_each作爲mydata數組。該成員函數接受兩個參數。一個是mydata陣列的每個元素,另一個是另一個陣列的int*。我喜歡使用std :: for_each調用具有多個參數的函數

::std::for_each (mydata.begin(), mydata.end(), train(net)); 

這給了我train功能的編譯錯誤,不採取一個參數。我知道如何使用for_each,如果沒有int*

我乘坐的火車功能是

void train(double const & data, int* d){} 

我怎樣才能使它發揮作用? 感謝

+0

你能不能提供對於int * d默認? –

回答

5

嘗試使用lambda功能:

std::for_each (mydata.begin(), mydata.end(), [&](double d) 
{ 
    train(d, net); 
}); 
+0

爲什麼參考'net'?我會做'[網](雙d){火車(d,網); } - 只需複製指針。 – MSalters

+0

你能解釋爲什麼這個工程? –

4

如果你有C++ 11可以使用std::bind

using namespace std::placeholders; // For `_1` 

std::for_each (mydata.begin(), mydata.end(), 
       std::bind(&MyClass::train, this, _1, net)); 

這裏的成員函數將參數來調用:首先是this指針,這始終是一個隱藏所有成員函數中的第一個參數。第二個參數是傳遞給由std::bind創建的可調用對象的第一個參數,第三個參數是net變量。

+0

爲什麼使用'std :: bind',當lambda更簡單時。 (在pre-C++ 11中,這可以很好地使用'boost :: bind'。) –

+0

@JamesKanze直到我已經寫好我的答案後纔想到它。這就是爲什麼我提出了來自亞歷山大的答案。 :) –

+0

在我看來,'bind'的語義比lambda函數的語義更清晰。 –

相關問題