3

クラス A とクラス B の 2 つのクラスがあり、どちらも名前空間 NAMESPACE で定義されているとします。これらのクラスは両方とも、ヘルパー関数 helper() を利用します。両方のクラスがこの関数を使用するため、.h ファイルで helper() を同じ名前空間の両方のクラスの外で定義しても問題ないと考えました。ただし、関数は、私のコードを使用する人なら誰でも表示および使用できます。私の理解では、これは慣習に反しており、代わりに、この関数を明示的に呼び出したくないので、何らかのメカニズムによってこの関数を非公開にする必要があります。ただし、プライベートとして宣言するには、両方のクラスで宣言する必要があり、後で .cpp ファイルで 2 回定義する必要があります。2 つのクラスで使用できるが、ユーザーには見えない関数を作成するには、どのような方法が最適でしょうか?

4

3 に答える 3

4

detail一般的なアプローチの 1 つは、名前空間内の名前空間に関数を配置することです。これは、他の人が意図的に使用できないという意味ではありませんが、API の名前空間を汚染することはありません。

または、両方のクラスを同じソース ファイルに実装する場合は、そのソース ファイルの匿名名前空間に配置し、ヘッダーにはまったく含めません。

于 2013-07-15T16:50:54.700 に答える
1
struct CommonImpl {
protected:
  static void foo() { }
};

struct A : CommonImpl {
  void bar() { CommonImpl::foo(); }
};

struct B : CommonImpl {
  void bar() { CommonImpl::foo(); }
};
于 2013-07-15T17:20:00.183 に答える
0

静的プライベート関数として宣言されたヘルパー関数を使用して別のクラスを作成するのはどうですか。クラス宣言では、これらのヘルパー関数をフレンド クラスとして使用するクラスも宣言します。このようにして、関数はそれを必要とするクラスだけが見ることができ、それ以外の誰にも見えません。

于 2013-07-15T17:12:10.470 に答える