C++仍然是一種不斷髮展的語言,多年來新增了新功能。C++的模塊概念
我在C++中錯過的一個特性是一個正確的模塊概念:使用頭文件的當前方法(使用條件#define來確保頭文件不包含兩次)似乎絕對不令人滿意。
例如,在我的項目中,我們遇到了許多源文件中包含太多「#include」的問題,這使得編譯時間不必要很長:使用Incredibuild需要45分鐘來構建我們的產品並行使用至少10個內核。因此,我們不得不花費大量的時間來手動清理文件,即刪除包括檢查它們是否真的需要。
我認爲這將是有一個模塊的概念,能夠
- 明確分開從模塊的實現接口是非常有用的;
- 單獨編譯接口和模塊的主體(當前.h文件每次被包含在其他文件中時會被重複編譯):一個工具可以讀取已編譯的接口,並告訴它的類型,函數,類出口;
- 編寫工具可以更輕鬆地自動重新排列導入(例如,使用Java/Eclipse可以自動重新排列文件的所有導入)。
您是否認爲有可能定義這樣的模塊概念並將其整合到C++中,或者這會太複雜?你知道這方面的努力嗎?
編輯
感謝有關預編譯頭的建議。如果可能的話,我會嘗試一下(我們使用Visual Studio 2008)。 也許我們以錯誤的方式使用頭文件(?)我們爲每個類使用一個頭文件。然後我們有一個類實現的cpp文件。通常我們最終得到包含30,40個頭文件的cpp文件。當我們更改cpp文件時,一些包含不再需要,但很難找出哪些包含。這部分與頭文件包含其他頭文件有關。
我們花費太多時間重新整理導入,看起來不存在可自動執行此操作的工具。這會爲我們節省很多時間。
我想查看搜索工具包括樹包括不包含任何使用的符號。當源文件發生變化時,很難保持包含清潔。 – Salw
我不確定你的第一句話是否屬實。 C++ 11標準很早以前就已定稿,不久前接受並在上週發佈;我懷疑現在有人在添加功能。 –
@Kerrek SB:我已經改變了刪除對C++ 0x的引用的文本。感謝您的建議。 – Giorgio