检测类型的存在
回答
它可以做到,尽管我只设法使它在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. json的检测类型
- 5. React中的类型检测
- 6. 在ArrayList中检测对象的类型
- 7. 检测接口的泛型类型
- 8. 检测异常类型
- 9. Android - 检测URL MIME类型?
- 10. Python导入类型检测
- 11. php图像类型检测
- 12. 字符类型检测
- 13. Elasticsearch - 检测类型一起
- 14. 从DataHandler检测MIME类型
- 15. 检测壁纸类型
- 16. 检测游标类型
- 17. TypeScript不检测泛型类
- 18. 检测可空类型
- 19. 在Python中检测数据类型
- 20. 在css中检测浏览器类型
- 21. 在ActionFilter中检测ActionResult类型?
- 22. 在代码中检测动态类型?
- 23. 痛饮/ Python的检测time_t类型的内存泄漏
- 24. T-SQL检测存储过程返回的列的类型
- 25. 检测泛型类型是否打开?
- 26. 检测意向的类型的Android
- 27. 从接口类型检测类
- 28. 从URL中检测存储库的类型
- 29. 真正的文件类型检测
- 30. 检测iPhone中断的类型
你想要编译是否包含''的代码,但做了不同的事情吗?这是邪恶的,特别是考虑到标准头文件如何相互包含在一起的实现。 –
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