http://www.cplusplus.com/forum/articles/10627/
1.hpp文件
hpp文件可以使用template函數和class靜態函數(不含靜態成員)
a)不可包含全局對象和全局函數 由於hpp本質上是作為.h被調用者include,所以當hpp文件中存在全局對象或者全局函數,而該hpp被多個 調用者include時,將在鏈接時導致符號重定義錯誤。要避免這種情況,需要去除全局對象,將全局函數封 裝為類的靜態方法。 b)類之間不可循環調用 在.h和.cpp的場景中,當兩個類或者多個類之間有循環調用關系時,只要預先在頭文件做被調用類的聲明 即可,如下: class B; class A{ public: void someMethod(B b); }; class B{ public: void someMethod(A a); }; 在hpp場景中,由於定義與實現都已經存在於一個文件,調用者必需明確知道被調用者的所有定義,而不能等到cpp 中去編譯。因此hpp中必須整理類之間調用關系,不可產生循環調用。同理,對於當兩個類A和B分別定義在各自的 hpp文件中,形如以下的循環調用也將導致編譯錯誤: //a.hpp #include "b.hpp" class A{ public: void someMethod(B b); }; //b.hpp #include "a.hpp" class B{ public: void someMethod(A a); } c)不可使用靜態成員 靜態成員的使用限制在於如果類含有靜態成員,則在hpp中必需加入靜態成員初始化代碼,當該hpp被多個文檔include時,將產生符號重定義錯誤。
2.
#ifndef MATH_HPP_
#define MATH_HPP_
//內容
#endif
3.多個類互相包含使用指針,不要用成員。