检测类型的存在

时间:2010-11-17 19:18:46

标签: c++ metaprogramming sfinae

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

2 个答案:

答案 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,您怎么能问这个?

我没有看到任何解决方案可能如何工作并且符合标准,但我不是标准的,所以可能有一个我不知道的警告。

相关问题