阅读候杰的《STL源码剖析》时,了解到SGI 版本的STL实现中。为了尽可能实现代码跨平台跨编译器的移植能力,使用环境组态文件<stl_config.h>定义的一些常量,并以条件编译取舍部分代码编译。
以下是查阅网上一些相关资料后,对<stl_config.h>中的预定义组态配置项的解释:
__STL_STATIC_TEMPLATE_MEMBER_BUG |
如果编译器无法处理static member of template classes(模板类静态成员)就定义 |
__STL_CLASS_PARTIAL_SPECIALIZATION |
如果编译器支持 partial specialization of class templates(模板类偏特化)就定义,所谓模板类偏特化 参考: http://blog.csdn.net/thefutureisour/article/details/7964682/ https://blog.csdn.net/q8250356/article/details/80672466 |
__STL_FUNCTION_TMPL_PARTIAL_ORDER |
如果编译器支持partial ordering of function templates或者说partial specialization of function templates就定义。 参考: https://msdn.microsoft.com/en-us/library/zaycz069.aspx 可以理解为对函数模板的重载的支持 https://blog.csdn.net/q8250356/article/details/80672500 |
__STL_MEMBER_TEMPLATES |
如果编译器支持template members of classes 就定义,模板类中包含模板成员 |
__STL_LIMITED_DEFAULT_TEMPLAES |
用到前一个模板的模板形参的某一个具现体作为当前模板的模板形参的默认值 例如: |
__STL_NON_TYPE_TMPL_PARAM_BUG |
测试类模板是否使用非类型模板参数(non-type template parameters) 参考: http://blog.csdn.net/zhangxiao93/article/details/50747862 https://blog.csdn.net/q8250356/article/details/80672544 |
__STL_NULL_TMPL_ARGS???为搞清楚 |
直接理解为 <> 比如: class stack{ friend bool ooperator== __STL_NULL_TMPL_ARGS(const stack&,const stack&); //... }; 展开为 class stack{ friend bool ooperator== <>(const stack&,const stack&); //... }; 某个类模板的实例化版本与其友元函数模板有一对一的关系(如操作符重载) |
__STL_TEMPLATE_NULL |
即 template <> 显式的模板特化 比如 __STL_TEMPLATE_NULL struct hash<char>{...}; 展开为 template<> struct hash<char>{...}; |