SFINAE允许我们检测一个类型是否具有某些数据成员或成员函数。它也可以用来检测一个类型是否存在吗?背景:我想知道是否<vector>
包括在内。
问问题
207 次
2 回答
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>
确定呢?
于 2010-11-17T19:30:20.827 回答
0
我对这个问题有一个问题:
如果<vector>
不包括在内,那么如何在不知道的情况下测试翻译单元中是否引入了类型?
您实际上是在要求编译器测试是否存在,但是如果不首先vector
声明,您怎么能问呢?vector
我看不出任何解决方案可能如何工作并符合标准,但我不是标准主义者,所以可能有一个我不知道的警告。
于 2010-11-18T07:39:14.217 回答