簡體   English   中英

用於免費功能的c ++源代碼組織

[英]c++ source code organization for free functions

我想開始更喜歡免費(非會員)功能而不是會員功能 - 遵循這篇文章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 ++規則。

如果沒有太多,可以在類頭和實現文件中放置處理特定類的自由函數。

否則,提出一個命名約定並將它們放在一個單獨的頭文件和實現文件中(例如ClassNameFunctions.h / .cpp)。

如果你想用自由函數替換成員函數,我假設這些自由函數與所討論的類緊密相關。 在這種情況下,他們不應該公開。 我會使用匿名內部命名空間:

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

//myclass.cpp
#include "myclass.h"
namespace myNamespace
{
   namespace
   {
      void helper() {};
   }
   void MyClass::foo()
   {
   }
}

我建議將自由函數的聲明放在一個單獨的頭文件中,因為它們不是類本身的一部分,但是我會將所有函數放在同一個命名空間中。

//Bar.h
namespace foo{
class Bar{}
}

在聲明自由函數的標題中,我將使用類本身的前向聲明。

//BarHelper.hpp
namespace foo{
class Bar;
void somefunc(&Bar);
}

在單獨的文件中照常執行。

現在我正在瀏覽大量的頭文件,其中通常有幾個類和自由函數的聲明和定義是混合的。 這是一個真正的痛苦。

所以KISS;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM