檢測類型的存在
回答
它可以做到,儘管我只設法使它在C++ 0x中工作。
struct no_type {};
struct is_vector_included {
template<typename U> static decltype(std::vector<U>::iterator()) func(U*);
template<typename U> static no_type func(...);
static const bool value = !std::is_same<no_type, decltype(func<int>(nullptr))>::value;
};
該結構非常好奇,雖然應該有一些明顯的簡化,但它們不起作用。更重要的是,你爲什麼不只是#include <vector>
是肯定的?
不幸的是,我的「目標受衆「沒有C++ 0x編譯器。什麼是'no_type'? – fredoverflow 2010-11-17 19:31:45
@FredOverflow:對不起,它是一個空的結構。這個想法是,任何其他類型都不可能是no_type,所以無論我最終通過decltype找到哪種類型,如果替換成功,它肯定不是no_type。編輯:仍然好奇,爲什麼你不只是#include它。 – Puppy 2010-11-17 19:39:15
@Dead:簡單包括它可能是最簡單/最乾淨的方式。仍然好奇,如果這是可能的,雖然:) – fredoverflow 2010-11-17 19:54:17
我有一個問題一個問題:
如果<vector>
沒有被列入,那麼你怎麼能測試是否型已在翻譯單元被引入不知道呢?
您正在有效地要求編譯器測試vector
是否存在,但是如何在沒有首先聲明vector
的情況下詢問?
我不明白任何解決方案如何可能工作,並符合標準,但我不standardista所以可能有一個警告,我不知道。
OP想知道向量是否被包含或不在首位 – Chubsdad 2010-11-18 07:43:59
@Chusbad:據我所知,但C++不允許查詢符號的存在(或不存在),據我所知,因爲使用一個符號(即使在一個簡單的'is_same'查詢中),你需要它被DECLARED。如果不包括'
- 1. 類型檢測
- 2. 檢測類的類型
- 3. 類型檢測,在Java
- 4. erlang類型檢測
- 5. React中的類型檢測
- 6. json的檢測類型
- 7. 在ArrayList中檢測對象的類型
- 8. 在iPhone上檢測802.11的類型
- 9. 檢測TypeScript中的泛型類型
- 10. 檢測接口的泛型類型
- 11. 檢測Javascript事件類型
- 12. TypeScript不檢測泛型類
- 13. 檢測異常類型
- 14. Android - 檢測URL MIME類型?
- 15. Elasticsearch - 檢測類型一起
- 16. 檢測文件類型
- 17. 檢測參數類型xslt
- 18. 字符類型檢測
- 19. 檢測遊標類型
- 20. php圖像類型檢測
- 21. Python導入類型檢測
- 22. 檢測iPhone設備類型
- 23. 檢測可空類型
- 24. 檢測壁紙類型
- 25. 檢測Windows網絡類型
- 26. 從DataHandler檢測MIME類型
- 27. 在代碼中檢測動態類型?
- 28. 在zend中未檢測到模型類
- 29. 在Python中檢測數據類型
- 30. 在ActionFilter中檢測ActionResult類型?
你想要編譯是否包含''的代碼,但做了不同的事情嗎?這是邪惡的,特別是考慮到標準頭文件如何相互包含在一起的實現。 –
2010-11-17 19:32:01
這表明不,但我對SFINAE一點都不好:http://stackoverflow.com/questions/3600244/use-sfinae-to-test-namespace-members-existence/3600286#3600286 – 2010-11-17 19:36:07