检测是否包含标准库容器

时间:2016-10-12 22:51:11

标签: c++ stl

我正在寻找编译时的跨平台方式,以确定是否包含标准库容器(vector,map,set,list) 例如     #ifdef HAS_VECTOR         //在这里用std vector做一些事情     #ENDIF

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:-1)

说真的,只需要包含你需要的东西。如果他们已被包括在内,那么这不是问题。