我最近对仿函数感到兴奋,并一直在使用它们。然后出现了我需要我的仿函数执行两个不同的操作的情况,我考虑向我的仿函数添加另一种方法(而不是重载 () 运算符)。这是否是不好的做法我不确定(也许你可以告诉我),但这让我开始思考为什么我首先使用函子而不仅仅是对象。所以我的问题是:
重载 () 运算符有什么特别之处,还是只是在语法上比使用普通命名方法更具吸引力?
更新:
首先,我知道为什么函子可能比其他问题中解释的函数指针更可取。我想知道为什么它们比具有命名方法的对象更可取。
其次,作为一个例子,当我想使用我的函子的另一个可能命名的方法时:基本上我有两个函数,一个计算称为图形分区的模块化的东西 -compute_modularity()
另一个计算一些变化后的模块化增益的分区compute_modularity_gain()
。我想我可以将这些函数作为同一个函子的一部分传递给优化算法,并将增益作为命名函数。我不只是将两个函子传递给算法的原因是我想强制它compute_modularity_gain()
仅与另一个函子结合使用compute_modularity()
,而不是另一个函子,例如compute_stability()
(只能与compute_stability_gain()
. 换句话说,增益函数必须与其兄弟函数紧密耦合。如果有另一种方法可以强制执行此约束,请告诉我。