我正在寻找编译时的跨平台方式,以确定是否包含标准库容器(vector,map,set,list) 例如 #ifdef HAS_VECTOR //在这里用std vector做一些事情 #ENDIF
答案 0 :(得分:0)
如果您想知道可以包含的标题:
如果您正在使用标准称为独立实现(有限库支持)的内容,那么您可以使用宏__STDC_HOSTED__
进行检查。如果将__STDC_HOSTED__
定义为1
,则任何符合标准的编译器都将提供适当的标准库。符合标准的托管实现无法选择要提供的容器标头,因此每个容器都没有单独的宏。 Clang提供了非标准__has_include
功能来测试#if
中的头文件,但这不是可移植的。
如果您想知道标题是否已包含在此翻译单元中:
除非您每次包含给定标头时手动定义自己的宏,否则无法检测到此情况。如果多次包含标准库头,则不会发生任何错误。
答案 1 :(得分:-1)
说真的,只需要包含你需要的东西。如果他们已被包括在内,那么这不是问题。