【问题标题】:Detect if standard library containers are included检测是否包含标准库容器
【发布时间】:2017-02-21 21:44:35
【问题描述】:

我正在寻找一种在编译时的跨平台方式,以确定是否包含标准库容器(向量、映射、集合、列表) 例如 #ifdef HAS_VECTOR // 在这里用标准向量做一些事情 #endif

【问题讨论】:

  • 包含在工具链的支持中,还是包含在项目中某个地方,有人正在使用标准容器?
  • 对不起,我要问:为什么?
  • #include <vector> 后跟 #if 1 应该可以解决问题
  • 嗨,MM - 聪明!如果您将此作为答案发布,我会接受!

标签: c++ stl


【解决方案1】:

说真的,只需包含您需要的内容即可。如果它们已经被包括在内,那么这不是问题。

【讨论】:

    【解决方案2】:

    如果您想知道可以包含的标题:

    如果您使用的是标准所称的独立实现(有限的库支持),那么您可以使用宏 __STDC_HOSTED__ 进行检查。如果__STDC_HOSTED__ 定义为1,那么任何符合标准的编译器都将提供适当的标准库。符合要求的托管实现无法选择要提供的容器标头,因此每个容器都没有单独的宏。 Clang 提供了非标准的__has_include 功能来测试#if 中的头文件,但这不是可移植的。

    如果您想知道标题是否已包含在此翻译单元中:

    除非您在每次包含给定标头时手动定义自己的宏,否则您无法检测到这一点。如果您多次包含标准库标头,则不会发生任何不好的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多