STL源码剖析——SGI STL编译器组态

阅读候杰的《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 

用到前一个模板的模板形参的某一个具现体作为当前模板的模板形参的默认值 

例如:
template<class T, class Sequence=deque<T> >

__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>{...};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值