我最近对函数对象产生了浓厚的兴趣,并在很多地方使用它们。但是,有一个情况让我需要让我的函数对象执行两个不同的操作,于是我考虑给我的函数对象添加另一个方法(而不是重载()运算符)。我不确定这是否是一种不好的做法(也许你可以告诉我),但这让我开始思考为什么我首先要使用函数对象而不是普通对象。所以我的问题是:
“重载()运算符是否有特殊之处,还是只是比使用常规命名方法略微更具语法吸引力?”
更新: 首先,我知道为什么函数对象可能比函数指针更可取,就像其他问题中解释的那样。我想知道为什么它们可能比具有命名方法的对象更可取。
其次,关于我想使用函数对象的另一个可能命名方法的示例:基本上我有两个函数,一个计算图分区的模块性 - compute_modularity(),另一个计算分区变化后模块性增益的compute_modularity_gain()。我认为我可以将这些函数作为同一个函数对象的一部分传递到优化算法中,增益函数为命名函数。我之所以不只是将两个函数对象传递到算法中,是因为我想强制实施compute_modularity_gain()仅与compute_modularity()一起使用,而不是与另一个函数对象(例如compute_stability())一起使用(后者应仅与compute_stability_gain()一起使用)。换句话说,增益函数必须与其兄弟函数紧密耦合。如果有其他方法可以强制执行此约束,请告诉我。
“重载()运算符是否有特殊之处,还是只是比使用常规命名方法略微更具语法吸引力?”
更新: 首先,我知道为什么函数对象可能比函数指针更可取,就像其他问题中解释的那样。我想知道为什么它们可能比具有命名方法的对象更可取。
其次,关于我想使用函数对象的另一个可能命名方法的示例:基本上我有两个函数,一个计算图分区的模块性 - compute_modularity(),另一个计算分区变化后模块性增益的compute_modularity_gain()。我认为我可以将这些函数作为同一个函数对象的一部分传递到优化算法中,增益函数为命名函数。我之所以不只是将两个函数对象传递到算法中,是因为我想强制实施compute_modularity_gain()仅与compute_modularity()一起使用,而不是与另一个函数对象(例如compute_stability())一起使用(后者应仅与compute_stability_gain()一起使用)。换句话说,增益函数必须与其兄弟函数紧密耦合。如果有其他方法可以强制执行此约束,请告诉我。
compute_modularity_gain()
并在调用compute_modularity()
时使兔子从你的屏幕上跳出来的类。你所能做的最好的事情就是让他们做错事情时看起来很奇怪。例如,接受模块化相关函数的成员函数可以被称为setModularityFunctors(functor1, functor2),因此如果将稳定性相关的functor传递给该成员函数,它会看起来完全不合适。 - Marcelo Cantos