2016-04-22 4 views

答えて

0

常に視認性を最小限に抑えるようにしてください。あなたが唯一のソースファイルで、あなたの機能が必要な場合は、無名の名前空間にそれを置くことができます。

// Your .cpp 
namespace 
{ 
    void yourHelperFunction(void) // only visible in the translation unit 
    { 
    ... 
    } 
} 

// 私は家に帰る途中で、現在ですが、私は高い評判を必要とするので、私はコメントしたかったです..多分私は後で私の答えを洗練するつもりです。

0

私は通常、再使用の要件に応じて、C++のヘルパー関数の4つの戦略のうちの1つを選択します。

1.関数は大規模で、1つのソースファイルでのみ使用されていますか?

これは、単一の.cppファイルに必要とされる機能であり、あなたの.ccpファイルの先頭に匿名の名前空間に入れて、複数の場所で使用されようとしている場合:

namespace 
{ 
int myHelperFunc() 
{ 
    int result = 0; 
    .... 
    return result; 
} 
} 

... 

bool MyClass::someMethod() 
{ 
    return 0 != myHelperFunc(); 
} 

void MyClass::someOtherMethod() 
{ 
    if (0 == myHelperFunc()) 
    { 
     for (int i = 0; i < 10; ++i) 
      std::cout << i << std::endl; 
    } 
} 

これにより、ヘルパー機能を再利用できますが、名前の競合の可能性はありません。

利点

  • 単一のファイルに制限範囲。
  • 同じ名前を持つ他のファイルの他のヘルパー関数との名前の競合はありません。ヘルパー関数の

欠点

  • 多数は、限られた範囲の機能を持つファイルを汚染することができ、ソースファイルの先頭でドロップ。

2.関数がクラス状態にアクセスする必要がありますか?

ヘルパー関数が内部クラス状態にアクセスする必要がある場合は、それをプライベートメソッドにします。

int MyClass::myStatefulHelperFunc() 
{ 
    int result = 0; 

    if (IsInitialized()) 
    { 
     .... 
    } 
    return result; 
} 

... 

bool MyClass::someMethod() 
{ 
    return 0 != myStatefulHelperFunc(); 
} 

void MyClass::someOtherMethod() 
{ 
    if (0 == myStatefulHelperFunc()) 
    { 
     for (int i = 0; i < 10; ++i) 
      std::cout << i << std::endl; 
    } 
} 

利点

  • 単一のクラスに限定スコープ。
  • クラス状態へのアクセス。
  • 派生クラスが代替実装でヘルパーをオーバーライドできるように仮想化することができます。

デメリット

  • は、ヘッダファイルで宣言する必要があります。

3.この関数は複数のソースファイルで役立ちますか?

ヘルパー関数は、コードベースの複数の場所で使用される可能性があります場合は、それ自身の名前空間内のそれ自身のファイルにそれを抽出します。

HelperFunction.h 

namespace ProjectHelpers 
{ 

/** 
* \brief Do helpful thing. 
* 
* \return a helpful integer. 
*/ 
int myHelperFunc(); 

} 

利点

  • 簡単にアクセスできるどこかでからコードベース。複数のクラス/翻訳単位間で共有ヘルパー関数の

欠点

  • 多数は、コードのにおいの指標とすることができます。

4.ヘルパー機能は1つの機能に制限されていますか?

ヘルパー関数が非常に小さく、その使用法が1つの関数に限定されている場合は、ラムダ関数を作成し、C++アルゴリズム関数(たとえばstd::for_each())を使用する他の関数と同様に使用できます。

利点

  • 単一の機能に限定されるものでスコープ。
  • 変数に代入することで、関数内の複数の場所で使用できます。

欠点

  • C++ 11以降のみ。ヘルパー関数のための

5. ...その他のオプション

その他のオプション静的クラスの機能とコピー/貼り付けコードが含まれています。上記の各戦略にはそれぞれ利点と欠点がありますので、独自のコードベースに最適なアプローチを決定するのはあなた次第です。

関連する問題