宏——絕對是C/C++世界裏面最奇妙的東西之一,經過宏你可以實現出大量的重複代碼。而根據我在[C/C++再探討STL裏的function和bind的實現 裏面講到的 FunctionBase、FunctionOfMem、 FunctionOfPtr 、 Functor 在實現一元到十元的模板類的過程當中,除卻參數個數的不一樣,基本的代碼結構沒有任何變化。既然如此,我先想辦法如何生成FunctionBase0 ... FunctionBase十、 FunctionOfMem0 ... FunctionOfMem十、 FunctionOfPtr0 ... FunctionOfPtr十、 Functor0 ... Functor10這些模板類。而既然這些模板類僅僅是差在參數個數上,我想有必要先把模板參數的各個單元分解出來,以下(完整板的請看代碼):
函數
// 模板參數(右側)列表 class _T0 , class _T1 , class _T2 #define TmplArgList3 TmplArgList2 , TmplArgType(2) // 模板參數(完整)列表 class _ResultType , class _T0 , class _T1 , class _T2 #define TemplList3 TemplList2 , TmplArgType(2) // 函數參數 _T2 arg2 #define TmplArgT3 TmplArg(2) TmplArgV(2) // 函數參數列表 _T0 arg0 , _T1 arg1 , _T2 arg2 #define TmplArgTList3 TmplArgTList2 , TmplArgT3 // 模板參數變量 _T2 #define TmplArgOT3 TmplArg(2) // 模板參數變量列表 _T0 , _T1 , _T2 #define TmplArgOTList3 TmplArgOTList2 , TmplArgOT3 // 函數參數變量 arg2 #define TmplArgOV3 TmplArgV(2) // 函數參數變量列表 arg0 , arg1 , arg2 #define TmplArgOVList3 TmplArgOVList2 , TmplArgOV3 // 函數指針 _ResultType(_T0, _T1, _T2) #define TmplFuncPtr3 TmplResult(TmplArgOTList3) // 模板參數(右側)列表 class _T0 , class _T1 , class _T2 , class _T3 #define TmplArgList4 TmplArgList3 , TmplArgType(3) // 模板參數(完整)列表 class _ResultType , class _T0 , class _T1 , class _T2 , class _T3 #define TemplList4 TemplList3 , TmplArgType(3) // 函數參數 _T3 arg3 #define TmplArgT4 TmplArg(3) TmplArgV(3) // 函數參數列表 _T0 arg0 , _T1 arg1 , _T2 arg2 , _T3 arg3 #define TmplArgTList4 TmplArgTList3 , TmplArgT4 // 模板參數變量 _T3 #define TmplArgOT4 TmplArg(3) // 模板參數變量列表 _T0 , _T1 , _T2 , _T3 #define TmplArgOTList4 TmplArgOTList3 , TmplArgOT4 // 函數參數變量 arg3 #define TmplArgOV4 TmplArgV(3) // 函數參數變量列表 arg0 , arg1 , arg2 , arg3 #define TmplArgOVList4 TmplArgOVList3 , TmplArgOV4 // 函數指針 _ResultType(_T0, _T1, _T2, _T3) #define TmplFuncPtr4 TmplResult(TmplArgOTList4)