2014-02-20 82 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函数的语义更清晰。 –

相关问题