代码之家  ›  专栏  ›  技术社区  ›  fredoverflow

检测类型的存在性

  •  1
  • fredoverflow  · 技术社区  · 15 年前

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

    2 回复  |  直到 9 年前
        1
  •  1
  •   Puppy    15 年前

    它可以做,虽然我只是设法使它在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> 确定吗?

        2
  •  0
  •   Matthieu M.    15 年前

    我有一个问题:

    如果 <vector> 不包含,那么您如何在不知道类型的情况下测试它是否已引入翻译单元?

    您实际上要求编译器测试 vector 存在,但是你怎么能不经宣告而问 矢量 首先也是最重要的?

    我不知道任何解决方案如何工作并符合标准,但我不是标准主义者,所以可能有一个警告,我不知道。