天天看點

SGI stl_config

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 = ;
};
           

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