hpp文件一般是聲明和定義都在一個文件裏面,使用的時候,直接include就可以用了,不需要額外編譯鏈接庫。
關鍵是給的hpp文件裏面還有namspace 包含這。
1 如果我在多個.cpp文件中使用,都需要include進來,這樣鏈接的時候,就會重複定義。
2 如果我不include,直接extern裏面的接口函數,就會報錯找不到namespace 的定義。
問題看似已經無解了,仔細琢磨了一下,有兩種辦法來解決。
一 這個hpp文件只能定義一次,那隻能自己再套一層接口,把hpp包裝起來,給自己提供一個接口.h 和定義.cpp
這樣單獨把hpp編譯成.o 。
二 在所有使用hpp中的接口的地方,
定義同名的namespace, 然後在namespace裏面extern hpp接口中的方法,這樣就避開了namespace的限制。
也是單獨編譯hpp,然後鏈接過來就可以了。
不過兩種做法都比較坑,最後要求提供接口的同學改了。
hpp 一般是用於模板元編程的時候,因爲模板元編程的時候,在模板參數傳遞進來之前,
類是沒有定義的,所以模板元類的 '定義'(實現) 和聲明一定要放在一個文件中。
當調用的地方,傳遞了模板參數之後纔是定義了類,這樣也不會重複定義,因爲每一個模板元定義出來的類都是不
同的。