gpt4 book ai didi

c++ - 如何为每个循环传递一个成员函数?

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:10 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com