stl_config.h
由于不同的编译环境对标准C++的支持不完全相同,出于移植性的考虑,SGI STL定义了这个文件。它通过条件编译针对不同的编译器作了部分常数设定,对编译器的设定如下:
1) 如果没有定义bool,true,false,定义 __STL_NEED_BOOL。
2) 如果不支持drand48(采用了48bit计算,产生双精度的伪随机数),定义 __STL_NO_DRAND48。
3) 如果不支持类模板的静态成员,定义 __STL_STATIC_TEMPLATE_MEMBER_BUG。
4) 如果不支持关键字typename,定义typename为一个空宏(null macro)。
5) 如果支持类模板局部特殊化(partial specialization of class templates),定义 __STL_CLASS_PARTIAL_SPECIALIZATION。
6) 如果支持函数模板局部特殊化(partial specialization of function templates),定义 Defines __STL_FUNCTION_TMPL_PARTIAL_ORDER。
7) 如果函数模板可以指明参数类型,定义 __STL_EXPLICIT_FUNCTION_TMPL_ARGS(SGI STL中未使用)。
8) 如果类中可定义函数模板为成员,定义 __STL_MEMBER_TEMPLATES。
9) 如果不支持关键字explicit,定义explicit为为一个空宏。
10) 如果不能根据前一个模板参数设定后一个模板参数,定义 __STL_LIMITED_DEFAULT_TEMPLATES。
11) 如果对无类型模板参数(non-type template parameters)执行函数模板的参数推导出错,定义 __STL_NON_TYPE_TMPL_PARAM_BUG。
12) 如果不支持iterators的->操作符,定义 __SGI_STL_NO_ARROW_OPERATOR。
13) 如果支持异常处理(exceptions),定义 __STL_USE_EXCEPTIONS。
14) 如果把STL放在一个namespace中,定义 __STL_USE_NAMESPACES。
15) 如果使用SGI编译,没有选择pthreads或其他threads,定义 __STL_SGI_THREADS。
16) 如果使用WIN32的多线程模式(multithreaded mode)编译,定义 __STL_WIN32THREADS。
17) 适当定义namespace相关宏(__STD, __STL_BEGIN_NAMESPACE, 等)。
18) 适当定义exception相关宏 (__STL_TRY, __STL_UNWIND, 等)。
19) 如果没有定义__STL_ASSERTIONS,定义__stl_assert为一个空宏。
20) 如果定义__STL_EXPLICIT_FUNCTION_IMPL_ARGS,定义__STL_NULL_TMPL_ARGS为<>,否则为空宏。
21) 如果定义__STL_CLASS_PARTIAL_SPECIALIZATION,定义__STL_TEMPLATE_NULL为template <>,否则为空宏。
由于不同的编译环境对标准C++的支持不完全相同,出于移植性的考虑,SGI STL定义了这个文件。它通过条件编译针对不同的编译器作了部分常数设定,对编译器的设定如下:
1) 如果没有定义bool,true,false,定义 __STL_NEED_BOOL。
2) 如果不支持drand48(采用了48bit计算,产生双精度的伪随机数),定义 __STL_NO_DRAND48。
3) 如果不支持类模板的静态成员,定义 __STL_STATIC_TEMPLATE_MEMBER_BUG。
4) 如果不支持关键字typename,定义typename为一个空宏(null macro)。
5) 如果支持类模板局部特殊化(partial specialization of class templates),定义 __STL_CLASS_PARTIAL_SPECIALIZATION。
6) 如果支持函数模板局部特殊化(partial specialization of function templates),定义 Defines __STL_FUNCTION_TMPL_PARTIAL_ORDER。
7) 如果函数模板可以指明参数类型,定义 __STL_EXPLICIT_FUNCTION_TMPL_ARGS(SGI STL中未使用)。
8) 如果类中可定义函数模板为成员,定义 __STL_MEMBER_TEMPLATES。
9) 如果不支持关键字explicit,定义explicit为为一个空宏。
10) 如果不能根据前一个模板参数设定后一个模板参数,定义 __STL_LIMITED_DEFAULT_TEMPLATES。
11) 如果对无类型模板参数(non-type template parameters)执行函数模板的参数推导出错,定义 __STL_NON_TYPE_TMPL_PARAM_BUG。
12) 如果不支持iterators的->操作符,定义 __SGI_STL_NO_ARROW_OPERATOR。
13) 如果支持异常处理(exceptions),定义 __STL_USE_EXCEPTIONS。
14) 如果把STL放在一个namespace中,定义 __STL_USE_NAMESPACES。
15) 如果使用SGI编译,没有选择pthreads或其他threads,定义 __STL_SGI_THREADS。
16) 如果使用WIN32的多线程模式(multithreaded mode)编译,定义 __STL_WIN32THREADS。
17) 适当定义namespace相关宏(__STD, __STL_BEGIN_NAMESPACE, 等)。
18) 适当定义exception相关宏 (__STL_TRY, __STL_UNWIND, 等)。
19) 如果没有定义__STL_ASSERTIONS,定义__stl_assert为一个空宏。
20) 如果定义__STL_EXPLICIT_FUNCTION_IMPL_ARGS,定义__STL_NULL_TMPL_ARGS为<>,否则为空宏。
21) 如果定义__STL_CLASS_PARTIAL_SPECIALIZATION,定义__STL_TEMPLATE_NULL为template <>,否则为空宏。