public メソッドが 1 つしかない単純なクラスの API について、同僚と話し合っています。私は最初に行きました:
class CalculateSomething
{
public:
void operator()(const SomeObject &obj) const;
private:
// ...
}
しかし、私の同僚は operator() の使用に反対しており、わかりやすくするために単にメソッドに「calculate」という名前を付けたいと考えています。その議論に説得力があるとは思いませんが、賛否両論を考えさせられました。
利点 operator()
- このクラスは無駄がなく、明確に定義された目的が 1 つあります。インスタンス化されると、基本的に無料の関数として機能します。
- これはファンクターであり、そのまま簡単に使用できます (例: STL アルゴリズム)。
- 範囲アルゴリズムで使用する場合、関数ポインターを介する代わりにオブジェクトを直接渡すことができます。これにより、コンパイラーはコードをインライン化できます。保証されていませんが、関数ポインターを介して渡すと、この可能性が完全に抑制されます。
デメリット operator()
- クラス名を見ないと、メソッドが何をするかはあまり明確ではありません。(クラスにはメソッドが1つしかないため、その意味はクラス名から明らかであるため、個人的には同意しません)
- STL のほとんどのファンクタは、ステートレスであると想定されています。これが私を引き留めている主な理由だと思います...
これは非常に一般的なシナリオ (1 つのクラス、1 つの責任) であると想定していたため、これに関する私の検索ではあまり出てこなかったことに驚きました。そういうわけで、私は他の人がこれについてどう思うかを聞くことに本当に興味があります.