次の非静的メンバー関数があるとします。
// .h
struct C {
void f();
}
C::f
ここで、に固有のいくつかのサブ関数を使用して実装しC::f
、短くして読みやすくしたいとします。例えば:
// .cpp
void C::f() {
h1();
h2();
//...
hn();
}
これらのh()の関数の多くは、データメンバーにアクセスする必要がないとします。これは、関数を静的フリー関数(1つの.cpp内)またはメンバー関数(静的かどうか)として定義できることを意味します。
それらを静的フリー関数またはCの関数メンバーにしますか?
最初のケースの利点の1つは、次のように宣言する必要がないことですC
。
// .cpp
static void h1() {//...}
static void h2() {//...}
static void hn() {//...}
また、私が間違っていなければ、グローバルな名前空間の汚染のリスクはありません。静的であるため、つまり、同じユニット.cpp(C :: fも定義されている)内の他の関数からのみ見ることができます。
2番目のケースでは、で宣言する必要がありますが、C
前述したように、これらはによってのみ使用されることになっていますC::f
。
// .h
struct C {
void f();
private:
static void h1(); // can be either static or non-static
static void h2();
static void hn();
}
// .cpp
void C::h1() {//...}
void C::h2() {//...}
void C::hn() {//...}
2番目のバージョンでは、理由もなくコードが肥大化すると思います。とりわけC::f
、コードを読みやすくするために、他の長いメンバー関数を分割する必要がある場合はなおさらです。