回答
通過「不建議使用的構造」,你的意思是「不推薦使用的成員函數」。您要求編譯時警告將您的注意力吸引到任何棄用函數的調用站點。
這在標準C++中不可能以任何合理的方式實現,而且我也沒有在G ++中看到任何支持這一點的屬性。 Qt無法真正添加這樣的功能,如果編譯器已經不支持它的話。
但是,Microsoft Visual C++支持__declspec(deprecated)
擴展,我想可以爲G ++ 4.5編寫一個編譯器插件來添加類似的功能。
看來我錯過了'__attribute __((已棄用))''在G ++中。 – 2011-01-21 15:07:59
您可能希望做類似的東西自己:
#ifdef Q_TREAT_OBSOLETE_AS_ERRORS
#define Q_OBSOLETE(X) \
BOOST_STATIC_ASSERT(false); \
X
#else
#define Q_OBSOLETE(X) X
#endif
這種結構簡單替換的代碼一些過時的代碼/一部分,如果沒有Q_TREAT_OBSOLETE_AS_ERRORS
定義否則產生編譯時錯誤。
請注意,BOOST_STATIC_ASSERT
沒有範圍限制,宏也是Q_OBSOLETE
。
可能這不是解決問題的最佳方法,實際上我不確定這是否有用。
您可能只需將代碼標記爲@obsolete
或者直接在註釋中指出即可。
這不起作用。這會導致編譯錯誤,如果不推薦使用的代碼是**編譯**,無論是否從其他地方調用該代碼。 – 2010-11-15 05:11:39
@Ken好吧,顯然你沒有辦法檢查是否有一些代碼塊被實際調用。這個靜態斷言的事情只是幫助吸引人們注意不贊成使用的功能的編譯。 *實際上,所有這些Q_OBSOLETE的東西對我來說似乎都是不必要的。* – 2010-11-15 09:04:46
他問(我認爲),因爲他習慣於Java,它可以註釋掉已棄用的函數,並在嘗試使用它時給予編譯器警告。 – 2010-11-15 14:50:31
Windows/MSVC是Qt的一個相當普遍的目標,所以我不得不不同意「不太可能」。 – 2010-11-15 19:16:18
- 將實際功能從公共範圍中拉出來。
- 在公共範圍內創建另一個具有相同名稱的函數。
- 在該功能中插入您的警告/失敗代碼。
- 用新的來調用原件。
這種方式不能發出編譯時警告。 – 2010-11-15 21:19:00
如果使用Q_DECL_DEPRECATED你應該得到你正在尋找例如爲:
Q_DECL_DEPRECATED void foo();
這應該是被接受的答案。 – dom0 2014-09-13 23:00:56
- 1. 突出標記爲過時的東西
- 2. 將本地方法標記爲已棄用/過時?
- 3. 如何將某些東西設爲固定像素值? jQuery的
- 4. 如何通過Delphi中的WebBrowser組件繪製某些東西
- 5. 將一個無主的類型標記爲已棄用或已過時
- 6. 如何在Ruby中將類標記爲已棄用?
- 7. 如何在Go中將代碼標記爲已棄用?
- 8. 如何有條件地只記錄某些類別的東西?
- 9. 如何獲得recv()用來接收某些東西的時間?
- 10. jquery index()如何通過其索引調用某些東西
- 11. iOS將ID分配給某些東西?
- 12. 經過一段時間後用Java打印某些東西
- 13. 如何在Java中編譯時斷言某些東西?
- 14. 如何從表中選擇某些東西等於變量的東西
- 15. 如何使用mod_rewrite爲重音字符分配某些東西?
- 16. 如何將Perl代碼標記爲已棄用?
- 17. 爲什麼Cursor.requery()標記爲「已棄用」?
- 18. 如何在當天的特定時間打印某些東西
- 19. HTML地圖標記是否已過時並已被棄用?
- 20. 如何標記存儲的東西
- 21. 某些東西已被POST後使用功能
- 22. 如何在Html5中使用JavaScript在div-boxes中計數「data-price」屬性,當某些東西被丟棄時?
- 23. 從列表中刪除某些東西
- 24. 在HTML C中搜索某些東西#
- 25. 你如何在Python中調用某些東西?
- 26. 從棱鏡中的演示中如何改變某些東西?
- 27. 如何從mongo中的數組中找到某些東西
- 28. 如何檢測到某些東西將被刪除
- 29. 如何處理某些東西時加載圖像?
- 30. 我如何找到R中的某些東西的百分比?
你想要什麼這樣一個宏或關鍵字做的結果? – bjoernz 2010-11-14 21:02:04
如果發現使用中已棄用的構造,則發出警告。有關更好的解釋,請參閱http://en.wikipedia.org/wiki/Deprecation。 – 2010-11-14 21:26:41