SGI stl_config

来源:互联网 发布:mac屏保显示时间 编辑:程序博客网 时间:2024/05/16 05:36

SGI版的stl库中在stl_config.h头文件中定义了里面所需要使用的所有的宏.提供对不同版本不同编译器的支持

根据编译器不同定义的宏
1. __STL_NO_BOOL
定义方式:
#if !defined(_BOOL)
#define __STL_NO_BOOL
在某些特定的编译器下会进行定义,如
# if defined(__SUNPRO_CC)
#define __STL_NO_BOOL
这个宏生效之后,通过下面这种方式定义出一个bool类型
# if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
typedef int bool;
#define true 1
#define false 0
# endif
2. __STL_HAS_WCHAR_T
用来表示编译器是否支持宽字节.

  1. __STL_NO_DRAND48
    是否有drand488函数,根据编译器的不同进行定义

  2. __STL_STATIC_TEMPLATE_MEMBER_BUG
    表示编译器在模板类中是否支持定义静态成员

  3. __STL_STATIC_CONST_INIT_BUG
    表示类中的静态常量成员是否能在类中进行初始化

class Demo{    static const int num = 10;};

6.__STL_CLASS_PARTIAL_SPECIALIZATION
表示是否支持模板类的局部特化
7. __STL_PARTIAL_SPECIALIZATION_SYNTAX
是否支持类模板中的部分排序…

用模板函数来举例

template<typename T>void foo(T t){}template<typename T>void foo(T *t){}template<>void foo(int *t){}

在决定特化的int类型函数归属的时候,就会用到这个特性..根据该特性,它属于第二个模板函数

8.__STL_FUNCTION_TMPL_PARTIAL_ORDER
是否支持函数模板中的部分排序
9.__STL_MEMBER_TEMPLATES
是否支持模板类中定义模板函数
10.__STL_MEMBER_TEMPLATE_CLASSES
是否支持内部类为一个模板类
11.__STL_TEMPLATE_FRIENDS
一个模板类是否可以为其他类的友元
12.__STL_EXPLICIT_FUNCTION_TMPL_ARGS
是否支持函数对模板参数的推导
13.__STL_LIMITED_DEFAULT_TEMPLATES
前一个模板参数是否能为后一个模板参数的默认值

template<typename T, typename CON = std::vector<T> >

14.__STL_NON_TYPE_TMPL_PARAM_BUG
无类型的模板参数

template<int size>class Demo{};

15.__SGI_STL_NO_ARROW_OPERATOR
编译器是否支持迭代器中的operator->
16.__STL_DEFAULT_CONSTRUCTOR_BUG
是否支持 int(num)这种构造方式
17.__STL_USE_EXCEPTIONS
是否支持异常
18.__STL_USE_NAMESPACES
是否使用命名空间
19.__STL_NO_EXCEPTION_HEADER
是否有exception头文件
20.__STL_NO_BAD_ALLOC
是否有new头文件,,或者这个头文件中是否有bad_alloc class.
21.__STL_SGI_THREADS
__STL_WIN32THREADS
__STL_PTHREADS
__STL_UITHREADS
_STL_THREADS
__STL_VOLATILE
线程相关的宏
22.__STL_LONG_LONG
是否支持long long
23.__STL_USE_CONCEPT_CHECKS
进行编译时的安全检查
24.__STL_NO_USING_CLAUSE_IN_CLASS
类定义中是否支持使用using
25.__STL_NO_FRIEND_TEMPLATE_CLASS
编译器是否支持友元为一个模板类
26.__STL_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE
是否支持模板参数为一个函数指针
27.__STL_MEMBER_TEMPLATE_KEYWORD
是否支持template为模板的关键字

用户自定义的宏
1.__STL_USE_SGI_ALLOCATORS
如果定义了它,,将会使用旧的SGI的allocator.
2.__STL_NO_NAMESPACES
定义了它,,将不会将该stl库加入std这个名字空间中
3.__STL_NO_RELOPS_NAMESPACE
定义了它,,一些操作运算符(>, <=. >=, !=)就不会加入到std::rel_opsz中
4.__STL_ASSERTIONS
会通过assert进行运行时的检查
5._PTHREADS
_UITHREADS
_NOTHREADS
线程相关
6._STL_NO_CONCEPT_CHECKS
不进行错误检查
7.__STL_USE_NEW_IOSTREAMS
定义它,,会使用iosfwd,,否则使用iostream

0 0
原创粉丝点击