1

SFINAE允许我们检测一个类型是否具有某些数据成员或成员函数。它也可以用来检测一个类型是否存在吗?背景:我想知道是否<vector>包括在内。

4

2 回答 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 回答