我們有幾個C++函數將在我們項目的階段2中實現,它們是公共接口或其各自的類和模塊的一部分。因爲它們是公共接口的一部分,所以我們認爲它們應該存在於第一階段的標題中,以便我們在實施其餘類時仍然在考慮它們。但是,由於它們未實現,我們不希望任何人給它們打電話。我們希望此檢查在編譯時發生,以確保正確性。C++編譯時未執行的檢查
我的願望是:
編譯時間(可能是一個錯誤或警告;警告更好,因爲它們更靈活 - 我們可以選擇將它們關閉)
G上作品+ +4.8.1並且不會在Visual Studio 2013下終止構建(我們僅使用Visual Studio/VisualAssistX作爲編輯器,但重構工具在沒有構建的情況下無法運行)
不太難理解所做的事爲什麼
個功能存在類文檔中(我們可以包括一些
\warning not implemented in phase 1
符號來doxygen的回暖)
我正在考慮三個選項:
的腰帶和揹帶的做法marking them as deprecated(它會產生一個警告)並拋出一個自定義的異常 - 這幾乎是我想要的,除了編譯器警告它「被棄用」與真實情況相反:現在不推薦使用的方法,但不會以後;這種方法將工作後,但現在不工作
另一個答案告訴how to forbid using a function while still having it exist - 這是很好,但難以閱讀,很難搜索。另外,這是一個編譯時錯誤 - 如果我們改變主意,我們不能讓一些函數調用它 - 它是全部或者全部。並且使每個未實現的函數都成爲一個模板,這讓我懷疑這個技巧是否會始終有效。例如,虛擬函數不能是模板。
只是把它們作爲一個評論 - 從美其名曰保持人,但他們也不會自動生成的文檔中出現(我們不能決定以後有選擇性呼叫)
有沒有更好的方法?如果不是,是否有理由更喜歡模板或評論選項而不是棄用選項?
['static_assert'](http://en.cppreference.com/w/cpp/language/static_assert)? – 2015-04-01 15:15:48
@JoachimPileborg(與模板)是什麼在[禁止使用](http://stackoverflow.com/a/18814056/309334)答案我在上面提到。 [這個答案](http://stackoverflow.com/a/5246686/309334)說明了爲什麼模板是必要的。 – Eponymous 2015-04-01 15:20:31