Modern C++ Design 学习笔记-第3章
生活随笔
收集整理的這篇文章主要介紹了
Modern C++ Design 学习笔记-第3章
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
?
1.Length
template <class T, class U> struct Typelist {typedef T Head;typedef U Tail; }; class NullType {}; template <class TList> struct Length; //特化 template <> struct Length<NullType> {enum { value = 0 }; }; //遞歸式 template <class T, class U> struct Length< Typelist<T, U> > {enum { value = 1 + Length<U>::value }; };#define LOKI_TYPELIST_1(T1) Typelist<T1, NullType>#define LOKI_TYPELIST_2(T1, T2) Typelist<T1, LOKI_TYPELIST_1(T2) >#define LOKI_TYPELIST_3(T1, T2, T3) Typelist<T1, LOKI_TYPELIST_2(T2, T3) >int main() { //3std::size_t n=Length<LOKI_TYPELIST_3(int,int,int)>::value; }2.typedef typename的定義
見此
template <class TList, unsigned int index> struct TypeAt;template <class Head, class Tail> struct TypeAt<Typelist<Head, Tail>, 0> {typedef Head Result; };template <class Head, class Tail, unsigned int i> struct TypeAt<Typelist<Head, Tail>, i> {typedef typename TypeAt<Tail, i - 1>::Result Result; };?
http://blog.163.com/cp7618@yeah/blog/static/70234777201122111034365/
http://www.cnblogs.com/carekee/articles/1748675.html
typename告訴編譯器, 后面的消息XXX::type是一個(gè)已經(jīng)存在于某處的類型的名字(type name)
3.TypeAtNonStrict
加了一個(gè)默認(rèn)值DefaultType
template <class TList, unsigned int index,typename DefaultType = NullType> struct TypeAtNonStrict {typedef DefaultType Result; };template <class Head, class Tail, typename DefaultType> struct TypeAtNonStrict<Typelist<Head, Tail>, 0, DefaultType> {typedef Head Result; };template <class Head, class Tail, unsigned int i, typename DefaultType> struct TypeAtNonStrict<Typelist<Head, Tail>, i, DefaultType> {typedef typename TypeAtNonStrict<Tail, i - 1, DefaultType>::Result Result; };4.IndexOf
也是遞歸式,定義了一個(gè)temp臨時(shí)變量
template <class TList, class T> struct IndexOf;template <class T> struct IndexOf<NullType, T> {enum { value = -1 }; };template <class T, class Tail> struct IndexOf<Typelist<T, Tail>, T> {enum { value = 0 }; };template <class Head, class Tail, class T> struct IndexOf<Typelist<Head, Tail>, T> { private:enum { temp = IndexOf<Tail, T>::value }; public:enum { value = (temp == -1 ? -1 : 1 + temp) }; };5.Append
?
6.Erase
轉(zhuǎn)載于:https://www.cnblogs.com/Clingingboy/archive/2012/03/09/2387614.html
總結(jié)
以上是生活随笔為你收集整理的Modern C++ Design 学习笔记-第3章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net 中Gridview 使用
- 下一篇: 尝试jquery插件的开发