如果你使用過boost::tuple,而且閱讀過其原始碼,那麼,typelist在你的面前或許沒有任何的神秘感,你可以很輕易的讀懂typelist的原始碼,但是,tuple和typelist的設計目標是完全不一樣的.
typelist的基礎**
template
struct typelist
;這個**看起來沒有任何可發揮指出,但是alex將這些**和模板組合起來,就發揮了不可思議的變化.typelist的產生模板如下:
template
<
typename t1 = nulltype, typename t2 = nulltype, typename t3 = nulltype,
typename t4 = nulltype, typename t5 = nulltype, typename t6 = nulltype,
typename t7 = nulltype, typename t8 = nulltype, typename t9 = nulltype,
typename t10 = nulltype, typename t11 = nulltype, typename t12 = nulltype,
typename t13 = nulltype, typename t14 = nulltype, typename t15 = nulltype,
typename t16 = nulltype, typename t17 = nulltype, typename t18 = nulltype
>
struct maketypelist
;template<>
struct maketypelist<>
;這個就是typelist的產生**,而且是在編譯過程中產生的。 主要的技術是使用模板偏特化和模板遞迴。
所以,我們很容易推導出:
maketypelist::result = typelist> >;
同時,alex還提供了對typelist的操作模板,也是使用模板偏特化和模板遞迴實現的,如:
template
struct length< typelist>;};
template struct typeat;
template struct indexof;
template struct erase;
template struct eraseall;
template struct noduplicates;
template struct replace;
template struct replaceall;
template struct reverse;
template struct mostderived;
template struct derivedtofront;
原始碼閱讀 Glide原始碼閱讀之with方法(一)
前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...
原始碼閱讀 Glide原始碼閱讀之load方法(二)
原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...