我正在尝试使用 std::for_each()
而不是普通的 for
循环作为练习,但我无法将成员函数传递给 for_each()
。
代码如下:
class Class
{
public :
void func (int a)
{
cout << a * 3 << " ";
}
}ob1;
int main()
{
int arr[5] = { 1, 5, 2, 4, 3 };
cout << "Multiple of 3 of elements are : ";
for_each(arr, arr + 5, ob1);
}
仅当此成员函数为 void operator() (int a)
时才有效。我不知道为什么不能将任何其他成员函数传递给 for_each()
!
最佳答案
您没有将任何类方法传递给 for_each()
,您传递的是一个对象,该对象仅在对象实现 operator()
时有效。
要让 for_each()
调用您的 Class::func()
方法,您需要:
在你的类中实现
operator()
:class Class { public: void func (int a) { std::cout << a * 3 << " "; } void operator()(int a) { func(a); } }ob1; std::for_each(arr, arr + 5, ob1);
使用实现
operator()
的单独委托(delegate)来调用您的类。您可以定义自定义仿函数(C++11 之前的版本):
struct functor { Class &obj; functor(Class &c) : obj(c) {} void operator()(int a) { obj.func(a); } }; std::for_each(arr, arr + 5, functor(ob1));
或使用
std::bind()
(C++11 及更高版本):#include <functional> auto func = std::bind(&Class::func, &obj1, std::placeholders::_1); std::for_each(arr, arr + 5, func);
或使用 lambda (C++11 及更高版本):
auto func = [&](int a){ obj1.func(a); }; std::for_each(arr, arr + 5, func);
关于c++ - 如何为每个循环传递一个成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101378/