2016-10-12 17 views
0

我正在寻找跨平台的方式来编译时确定是否包含标准库容器(向量,地图,集合,列表) 的#ifdef HAS_VECTOR //做一些性病矢量这里 #ENDIF检测是否包含标准库容器

+0

包括在工具链支持或包含在项目的某个地方有人使用std容器? – user4581301

+0

对不起,但我不得不问:为什么? –

+3

'#包括'后面加'#if 1'应该诀窍 –

回答

-1

严重,只是包括你所需要的。如果他们已经被包括在内,那么这不是问题。

0

如果你想知道的连接头可用于包括:

如果你用的是什么标准调用独立执行(仅限库的支持),那么你可以检查与宏__STDC_HOSTED__。如果__STDC_HOSTED__被定义为1那么任何符合标准的编译器都会提供一个合适的标准库。符合托管的实现无法选择和选择要提供的容器标题,因此每个容器都没有单独的宏。 Clang提供非标准__has_include功能来测试#if中的头文件,但这不是便携式的。

如果你想知道,如果头已被列入这个翻译单位:

你无法检测,除非你手动定义每次包括给定标时间自己的宏。如果您多次包含标准库标题,则不会发生任何错误。

相关问题