回答
如果你不關心可移植性,VC++中的__if_exists語句可以滿足你的需求。
在預處理階段沒有這樣的事情,所以沒有宏。
但是,您可以查看is_class
類型特徵available in Boost或C++ 0x,使您可以在編譯時做出決定。
我認爲這裏的問題是'Namespace :: MyClass'必須聲明爲某些東西,即使它不是一個類? – UncleBens 2010-04-20 17:35:09
我想包括文件,根據知識,如果一些類已經定義。 – 2010-04-20 18:10:16
@topright:但是爲什麼?如果你不小心,有幾種方法可能會有問題。 – 2010-04-20 19:19:20
編號預處理指令和宏由預處理器評估,預處理器在代碼被解析爲C++之前完成其任務。預處理器不瞭解類或名稱空間。
這是不可能的,但您可以使用include guard常量來驗證該類是否已包含在內。
是的,確實如此。但這不是真正的解決方案。 – 2010-04-20 18:08:21
要什麼問題? – soulmerge 2010-04-21 16:25:08
對我來說,聽起來好像是測試一下包含你正在尋找的類定義的頭文件是否包含在內,而不是試圖查看該類是否存在。這真的很容易檢查這一點,如果你已經實現定義每個頭文件中的符號的標準,如圖所示:
// myfile.h
#ifndef _MYFILE_H_
#define _MYFILE_H_
// CODE
#endif // _MYFILE_H_
你最好的選擇雖然是剛剛確定被包含在你的頭文件正確的順序在第一位。最簡單的方法是製作一個「整體」頭文件,該文件包含所有需要按正確順序排列的頭文件。只需將其包含在項目中的每個源文件中,即可順利完成。這不一定是最好的解決方案,但它是最簡單的。
- 1. Objective-C的宏,如果
- 2. 要測試的C宏:「如果多於一個定義」
- 3. 如果定義了某些宏,則繼承更多的類
- 4. 爲什麼只定義一個宏,如果它尚未定義?
- 5. 類似於「如果constexpr」但類定義
- 6. 一排如果。宏
- 7. 如果宏未定義,如何刷新錯誤?
- 8. 定義一個宏,則取消定義它,如果它以前未定義
- 9. 如果在模塊中定義宏,我該如何正確編寫宏文檔?
- 10. 使用#define宏來檢查com結果的C++定義函數
- 11. ruby a = b || c如果b未定義
- 12. 如果頁面是typeof自定義類
- 13. Clang定義了什麼宏來宣佈C++ 11模式(如果有的話)?
- 14. 如果B使用類A(C++),如何定義類B的析構函數?
- 15. 在類定義中聲明的C++宏?
- 16. 如何定義類類型的約束如果它具有自定義屬性?
- 17. C++宏插入類型名稱,如果必要
- 18. C#自定義詞典類型與setter如果不存在鍵
- 19. 生成一個錯誤,如果選中布爾宏未定義
- 20. configure.ac:如果`backtrace`可以定義一個宏
- 21. RELEASE C++宏定義
- 22. 嵌入式如果宏觀
- 23. 如果聲明SAS宏
- 24. 如果內部宏使用
- 25. 如果不然,如果序言類似於C/C++
- 26. 如何定義宏?
- 27. JS如果未定義
- 28. 定義結果如同#1
- 29. 如果在C++之前沒有定義,定義函數/方法
- 30. 如何在C中定義DEBUG宏
什麼是更大的圖片?你想做什麼? – 2010-04-20 17:06:52