日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Modern C++ Design 学习笔记-第3章

發布時間:2025/7/14 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Modern C++ Design 学习笔记-第3章 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

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是一個已經存在于某處的類型的名字(type name)

3.TypeAtNonStrict

加了一個默認值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

也是遞歸式,定義了一個temp臨時變量

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

轉載于:https://www.cnblogs.com/Clingingboy/archive/2012/03/09/2387614.html

總結

以上是生活随笔為你收集整理的Modern C++ Design 学习笔记-第3章的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。