已經走了好遠好遠,現在開始回到我們的目標list_av_N模板:
[cpp]
template<class A1> struct list_av_1
{
typedef typename add_value<A1>::type B1;
typedef list1<B1> type;
};
template<class A1, class A2> struct list_av_2
{
typedef typename add_value<A1>::type B1;
typedef typename add_value<A2>::type B2;
typedef list2<B1, B2> type;
};
因此知道當A1是boost::arg<1>的時候,B1也就是boost::arg<1>
list1<B1> 就是一個類型,通過繼承storage1<B1>來獲得擁有a1_()靜態成員函數的能力。
list_av_2依此類推,比list_av_1多擁有B2類型(也就是boost::arg<2>)和 a2_()靜態成員函數。
獲得這些能力都是在編譯期。這種實現手法比Moder C++ Design寫法簡單,好處是容易理解,壞處是代碼寫的很多很多。