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

标签 c++ class foreach

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

相关文章:

c++ - 如何使用 Clang 获取模板类型类成员的实际类型?

c++ - QT 中 Qpushbutton 内的鼠标按下事件

c++ - 使用 Visual C++ 在桌面上绘图

c++ - 是否可以将 dll 添加到资源中,并使用 LoadLibrary 从资源中加载该 dll? C++

java - 如何让 VSCode 识别 Java 代码中的 Kotlin 类?

php - CodeIgniter - 查询数组输出三次而不是一次

java - java中的跨类同步

ruby - 单例类的出现

datetime - Apache Pig:将当前日期和时间作为常数添加到每个生成的记录中

java - Java 中是否存在与带有引用变量的 for-each 循环等效的方法?