C++實例:sgistl_config.h各種宏的含義

字號:

stl_config.h
    由于不同的編譯環(huán)境對標準C++的支持不完全相同,出于移植性的考慮,SGI STL定義了這個文件。它通過條件編譯針對不同的編譯器作了部分常數(shù)設定,對編譯器的設定如下:
    1) 如果沒有定義bool,true,false,定義 __STL_NEED_BOOL。
    2) 如果不支持drand48(采用了48bit計算,產(chǎn)生雙精度的偽隨機數(shù)),定義 __STL_NO_DRAND48。
    3) 如果不支持類模板的靜態(tài)成員,定義 __STL_STATIC_TEMPLATE_MEMBER_BUG。
    4) 如果不支持關(guān)鍵字typename,定義typename為一個空宏(null macro)。
    5) 如果支持類模板局部特殊化(partial specialization of class templates),定義 __STL_CLASS_PARTIAL_SPECIALIZATION。
    6) 如果支持函數(shù)模板局部特殊化(partial specialization of function templates),定義 Defines __STL_FUNCTION_TMPL_PARTIAL_ORDER。
    7) 如果函數(shù)模板可以指明參數(shù)類型,定義 __STL_EXPLICIT_FUNCTION_TMPL_ARGS(SGI STL中未使用)。
    8) 如果類中可定義函數(shù)模板為成員,定義 __STL_MEMBER_TEMPLATES。
    9) 如果不支持關(guān)鍵字explicit,定義explicit為為一個空宏。
    10) 如果不能根據(jù)前一個模板參數(shù)設定后一個模板參數(shù),定義 __STL_LIMITED_DEFAULT_TEMPLATES。
    11) 如果對無類型模板參數(shù)(non-type template parameters)執(zhí)行函數(shù)模板的參數(shù)推導出錯,定義 __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相關(guān)宏(__STD, __STL_BEGIN_NAMESPACE, 等)。
    18) 適當定義exception相關(guān)宏 (__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 <>,否則為空宏。