[英]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()
時,如何組織我的代碼? 我還想將此函數放入命名空間。
假設ClassName
在namespace 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.