SFINAE允许我们检测某个类型是否具有某些数据成员或成员函数。它是否也可用于检测是否存在某种类型?背景:我想知道是否包含<vector>
。
答案 0 :(得分:1)
它可以做到,虽然我只是设法让它在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>
?
答案 1 :(得分:0)
我对这个问题有一个问题:
如果未包含<vector>
,那么如何在不知情的情况下测试翻译单元中是否引入了类型?
您是否有效地要求编译器测试vector
是否存在,但是如果不首先声明vector
,您怎么能问这个?
我没有看到任何解决方案可能如何工作并且符合标准,但我不是标准的,所以可能有一个我不知道的警告。