3.9 移除typelist中的某個(gè)元素
移除第一個(gè)匹配者:
template <class TList, class T> struct Erase;
template <class T> struct Erase<NullType, T>{
typedef NullType Result;
};
template<class T, calss Tail>
struct Erase<Typelist<T, Tail> T>{
typedef Tail Result;
};
template <class Head, class Tail, class T>
struct Erase<Typelist<Head, Tail>, T>{
typedef Typelist<Head,
typename Erase<Tail, T>::Result>
Result;
};
注意Erase<double, int>這樣使用會(huì)導(dǎo)致編譯錯(cuò)誤。移除所有匹配者的實(shí)現(xiàn)如下:
template <class Tlist, class T>struct EraseAll;
template <class T> struct EraseAll<NullType, T>{
typedef NullType Result;
};
template <class T, class Tail>
struct EraseAll<Typelist<T, Tail>, T>{
typedef typname EraseAll<Tail, T>::Result Result;
};
template <class Head, class Tail, class T>
struct EraseAll<Typelist<Head, Tail>, T>{
typedef Typelist<Head,
typename EraseAll<Tail, T>::Result>
Result;
};
3.10 移除重復(fù)元素(略)
3.11 取代Typelist中的某個(gè)元素(略)
3.12 為T(mén)ypelists局部更換次序(略)