STL笔记(1)——STL的一些组态

来源:互联网 发布:淘宝皇冠店出售 编辑:程序博客网 时间:2024/06/06 10:42

C++学习初见成效,开始钻研侯捷老师的《STL源码剖析》,现整理学习笔记,记录之。

STL的一些组态

STL六大组件分别为:
1. 容器 Containers
2. 算法 Algorithms
3. 迭代器 Iterators
4. 仿函数 Functors
5. 配接器 Adapters
6. 分配器 Allocators

不过在这之前侯捷老师先介绍了一些令人困惑的语法:
在STL源码分析中,提到组态(configurations),这里我直接理解为其中文翻译,配置,也就是说当编译器无法处理或者不支持一些情况时,进行一些配置,为预定义。

__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/


__STL_FUNCTION_TMPL_PARTIAL_ORDER

如果编译器支持partial ordering of function templates或者说partial specialization of function templates就定义。参考:https://msdn.microsoft.com/en-us/library/zaycz069.aspx 可以理解为对函数模板的重载的支持


__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


__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>{...};
1 0
原创粉丝点击