我正在与同事讨论一个只有一个公共方法的简单类的API问题。我最初采用的是:
class CalculateSomething
{
public:
void operator()(const SomeObject &obj) const;
private:
// ...
}
然而,我的同事反对使用operator(),希望仅仅将该方法命名为'calculate'以增加清晰度。尽管我并不认为这个论点有说服力,但它让我考虑了一下利弊。
operator()的优点
- 该类精简且具有单一明确的目的。一旦实例化,它基本上就像自由函数一样运作。
- 它是一个仿函数,并且可以轻松地用作这样的函数(例如STL算法)。
- 在使用它与范围算法时,对象可以直接传递,而不是通过函数指针,这使得编译器可以内联代码。虽然不能保证,但通过函数指针传递它完全阻止了这种可能性。
operator()的缺点
- 没有查看类名就不太清楚该方法的作用。(我个人不同意,因为该类只有一个方法,因此从类名中就可以清楚了解其含义)
- STL中的大多数仿函数都被期望是无状态的。我认为这是阻碍我的主要原因...
我惊讶地发现我的搜索并没有带来太多的结果,因为我认为这是相当常见的情况(一个类,一个责任)。因此,我真的很想听听其他人对此的看法。