5

メンバー関数よりも無料の(非メンバー)関数を優先したい-この記事に従ってhttp://www.drdobbs.com/184401197

私はC++クラスをそのように編成するために使用されます。ClassName.hこれは、宣言ClassName.C用と実装用にあります。

ClassName.h :

struct ClassName { 
    ClassName();
    void setData( unsigned data );
};

そして、実装は

ClassName.C :

#include "ClassName.h"

ClassName::ClassName() { dosomething(); };
void setData( unsigned data ) { dootherthings(); }; 

では、無料の関数が必要なときにコードを整理するにはどうすればよいadjustClassData()ですか?この関数も名前空間に入れたいです。

にあると仮定するClassNamenamespace foo、free関数もに入れnamespace fooます。

namespace foo {
    void adjustClassData( ClassName & inObj );
}

namespaceファイル名の側面と提案を探しています。

ファイル編成を規定する標準にはC++ルールがないため、いくつかのベストプラクティスを探しています。

4

3 に答える 3

6

あまり多くない場合は、特定のクラスを処理する無料の関数をクラス ヘッダーと実装ファイルに配置できます。

それ以外の場合は、命名規則を考え出し、別のヘッダーと実装ファイルに配置します (例: ClassNameFunctions.h/.cpp)。

于 2012-06-05T19:21:43.750 に答える
1

メンバー関数を無料の関数に置き換えようとしている場合、これらの無料の関数は問題のクラスに密接に関連していると思います。その場合、それらは公開されるべきではありません。匿名の内部名前空間を使用します。

//myclass.h
namespace myNamespace
{
   class MyClass
   { 
      void foo();
   };
}

//myclass.cpp
#include "myclass.h"
namespace myNamespace
{
   namespace
   {
      void helper() {};
   }
   void MyClass::foo()
   {
   }
}
于 2012-06-05T19:24:07.650 に答える