我已經基於模板創建了一個庫。我想提供一個我的圖書館用戶可以包含的文件。因爲它是一個模板庫,我認爲庫文件需要是一個.h文件。所以要創建我包含我的所有其他模板頭文件(與聲明和定義),然後編譯與g ++ -E(只是預處理)。這個想法一直工作,直到使用該庫的人使用我在庫中使用的標準頭文件(如字符串)或庫(如boost)。由於預處理,所有在String中的定義都被複制到庫文件中。如果用戶也使用字符串,編譯器會拋出一個雙重定義錯誤,因爲它在我的庫和頭文件中定義。創建模板庫文件
那麼我該如何解決我的問題?是否有另一種生成我的庫文件的方式?或者,我是否可以阻止包含頭文件,並只爲我的文件插入include語句,而這些文件是在用戶編譯時處理的?
謝謝 DevWurm
你在做什麼毫無意義可言。您不要預處理標題以嘗試使其處於獨立狀態。您將頭文件編碼爲標準符合,並讓客戶端(用戶代碼)提供您的庫消耗的符合性實現。你的模板頭*是你的庫文件。通過預處理器去除依賴關係會導致依賴於平臺的代碼和其他許多問題。是否有一些特殊的原因,你*不*將*模板庫封裝在*命名空間*中? – WhozCraig
@WhozCraig是的,我看到了...所以我應該提供一個包含所有源文件和庫文件的整個文件夾,而不是像我想的那樣只提供一個庫文件?你爲什麼認爲我沒有將它封裝到命名空間中?我這樣做? – DevWurm
如果您有多個用戶定義的標題,那麼它們應該是您的發行版的一部分。你如何設置它取決於你,但我可能會把它們保存在'yourlibname'文件夾中,確保客戶端包含文件夾*,**文件夾*位於其包含路徑,*和*代碼中*你的頭文件*和他們的*到'#include「yourlibname/header.h」'這可能對你正在嘗試做的事情有點公然,但我不知道你的庫結構;你是。這是一個類似於'boost'佈局的設置。但我可以告訴你,嘗試預處理解決方案不是正確的路徑。 – WhozCraig