我正在与一位同事讨论只有一个公共方法的简单类的 API。我最初选择的是:
class CalculateSomething
{
public:
void operator()(const SomeObject &obj) const;
private:
// ...
}
但是,我的同事反对使用 operator() 并希望为清楚起见简单地将方法命名为“计算”。虽然我觉得这个论点没有说服力,但它让我想到了利弊。
优点 operator()
- 该类是精简的,并且有一个明确定义的目的。一旦实例化,它基本上充当一个自由函数。
- 它是一个仿函数,可以很容易地使用(例如 STL 算法)。
- 当将它与范围算法一起使用时,可以直接传递对象而不是通过函数指针,这使编译器能够内联代码。虽然不能保证,但通过函数指针传递它会完全抑制这种可能性。
缺点 operator()
- 如果不查看类名,则不太清楚该方法的作用。(我个人不同意,因为该类只有一种方法,因此从类名中可以清楚地看出其含义)
- STL 中的大多数函子都应该是无状态的。我认为这是阻碍我前进的主要原因......
我很惊讶地发现我对此的搜索并没有带来太多,因为我认为这是一个很常见的场景(一个班级,一个责任)。因此,我真的很想听听其他人对此的看法。