使用函数调用函子

Using a function to call a functor

本文关键字:函数调用      更新时间:2023-10-16

我有一个算法,调用几个函数来处理它的数据。这些函数中的每一个都共享和操作许多相同的变量。因此,我试图避免使用一组包含一长串引用参数的函数,因为我发现这变得非常难以阅读,特别是因为许多这些变量都是STL容器。因此,我实现了一个函子来执行算法的工作,并为该函子定义了一个函数包装器,如下所示

class myfunctor {
private:
   ... list of shared members ...
   void A(..args..) { ..do some work on shared members.. } 
   void B(..args..) { ..do some work on shared members.. }
   void C(..args..) { ..do some work on shared members.. }
public:
   void operator()(class1& X, class2& Y) {
      A( .. );
      ..
      B( .. );
      ..
      C( .. );
      ..etc.. 
   }
};
void algorithm(class1& X, class2& Y) {
    myfunctor obj;
    obj(X, Y);
}

我只是好奇,看看是否有一个更好的方法来实现几个函数都依赖于相同的变量,如果这被认为是不好的做法?

当无数函数在同一个共享数据上工作时,使它们成为类的成员函数并将数据作为实例数据是合理的选择。

然而,

";functor”这个词可能不适合你的小可爱。

一个函子的行为很像一个简单的函数指针:它可以自由地复制,通常,从调用者的角度来看,它似乎不会改变状态。虽然你的小动物显然不能自由地复制,而且似乎改变了状态。我认为你的小动物更像是一个状态机对象,通过函数调用从一个状态带到另一个状态。

干杯,hth。