好多人喜歡把工具函數做成static member function。這樣以增加隱蔽性和封裝性,由其是從C#,java轉而使用c++的開發人員。
例如:
class my_math { public: static UINT Hash_XYZ(float x,float y,float z); static UINT Hash_XY(floag t, float y); //... //... }; namespace my_math { UINT Hash_XYZ(float x, float y, float z); static UINT Hash_XY(float x, float y); //... //... }
調用這個函數都是這樣調用的
my_math::HashXYZ(3423.0f,234.2f,2344.0f)
這在里應該使用namespace而不是class,原因如下:
1.在《Effective c++》這本書條款23中提到:寧以non-member、non-friend替換member函數。面向對象守則要求,數據以及操作數據的那些函數應該捆綁在一起,而上面這個函數顯然沒有數據。
2.命名空間允許使用using namespace,在代碼使用密集使用相關函數時在作用域里聲明using namespace my_math可以簡化代碼
3.c++的類一般是用在聲明對象時使用的(a kind of object),靜態成員函數一般要跟他所在的類有所關聯。
4.一般要用到static類成員函數有以下原因:a.你需要訪問一個靜態類成員;b.有一些模板函數,你正好需要去為所有函數指定一個模板參數。
5.namespace可以把聲明和定義 放在不同的.h