使用函数调用仿函数

时间:2011-09-18 03:33:43

标签: c++ coding-style functor

我有一个算法可以调用多个函数来处理它的数据。这些函数中的每一个都共享和操作许多相同的变量。因此,我试图避免使用一组包含一长串引用参数的函数,因为我发现它变得非常难以阅读,特别是因为其中许多变量都是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);
}

我只是想知道是否有更好的方法来实现几个完全取决于相同变量的函数,如果这被认为是不好的做法?

1 个答案:

答案 0 :(得分:3)

使用无数函数处理相同的共享数据,使它们成为具有数据作为实例数据的类的成员函数是合理的选择。

然而,“仿函数”可能不是你的野兽的正确术语。

仿函数的行为很像一个简单的函数指针:它可以自由地复制,并且通常从调用者的角度来看,似乎不会改变状态。虽然你的野兽显然无法自由复制,并且确实会出现改变状态。我说你的野兽更像是一个状态机对象,通过函数调用从状态到状态。

干杯&第h。,