C++實(shí)例:sgistl_config.h各種宏的含義

字號(hào):

stl_config.h
    由于不同的編譯環(huán)境對(duì)標(biāo)準(zhǔn)C++的支持不完全相同,出于移植性的考慮,SGI STL定義了這個(gè)文件。它通過(guò)條件編譯針對(duì)不同的編譯器作了部分常數(shù)設(shè)定,對(duì)編譯器的設(shè)定如下:
    1) 如果沒(méi)有定義bool,true,false,定義 __STL_NEED_BOOL。
    2) 如果不支持drand48(采用了48bit計(jì)算,產(chǎn)生雙精度的偽隨機(jī)數(shù)),定義 __STL_NO_DRAND48。
    3) 如果不支持類(lèi)模板的靜態(tài)成員,定義 __STL_STATIC_TEMPLATE_MEMBER_BUG。
    4) 如果不支持關(guān)鍵字typename,定義typename為一個(gè)空宏(null macro)。
    5) 如果支持類(lèi)模板局部特殊化(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ù)類(lèi)型,定義 __STL_EXPLICIT_FUNCTION_TMPL_ARGS(SGI STL中未使用)。
    8) 如果類(lèi)中可定義函數(shù)模板為成員,定義 __STL_MEMBER_TEMPLATES。
    9) 如果不支持關(guān)鍵字explicit,定義explicit為為一個(gè)空宏。
    10) 如果不能根據(jù)前一個(gè)模板參數(shù)設(shè)定后一個(gè)模板參數(shù),定義 __STL_LIMITED_DEFAULT_TEMPLATES。
    11) 如果對(duì)無(wú)類(lèi)型模板參數(shù)(non-type template parameters)執(zhí)行函數(shù)模板的參數(shù)推導(dǎo)出錯(cuò),定義 __STL_NON_TYPE_TMPL_PARAM_BUG。
    12) 如果不支持iterators的->操作符,定義 __SGI_STL_NO_ARROW_OPERATOR。
    13) 如果支持異常處理(exceptions),定義 __STL_USE_EXCEPTIONS。
    14) 如果把STL放在一個(gè)namespace中,定義 __STL_USE_NAMESPACES。
    15) 如果使用SGI編譯,沒(méi)有選擇pthreads或其他threads,定義 __STL_SGI_THREADS。
    16) 如果使用WIN32的多線程模式(multithreaded mode)編譯,定義 __STL_WIN32THREADS。
    17) 適當(dāng)定義namespace相關(guān)宏(__STD, __STL_BEGIN_NAMESPACE, 等)。
    18) 適當(dāng)定義exception相關(guān)宏 (__STL_TRY, __STL_UNWIND, 等)。
    19) 如果沒(méi)有定義__STL_ASSERTIONS,定義__stl_assert為一個(gè)空宏。
    20) 如果定義__STL_EXPLICIT_FUNCTION_IMPL_ARGS,定義__STL_NULL_TMPL_ARGS為<>,否則為空宏。
    21) 如果定義__STL_CLASS_PARTIAL_SPECIALIZATION,定義__STL_TEMPLATE_NULL為template <>,否則為空宏。