• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 42  文章 - 3  trackbacks - 0
            <2012年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(2)

            隨筆檔案

            文章檔案

            網頁收藏

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            This article is for reading of C++ Templates The Complete Guide.
             
            1 Define a function template:
            template <typename T>
            inline T const& max (T const& a, T const& b)
            {
               return a<b?b:a;
            }
            As seen in this example, template parameters must be announced with syntax of the following form:
            template < comma-separated-list-of-parameters >, the keyword typename introduces a so-called type parameter.

            2 Calling to a function template:
            int i = 42;
            std::cout << "max(7,i): " << ::max(7,i) << std::endl;
            double f1 = 3.4;
            double f2 = -6.7;
            std::cout << "max(f1,f2): " << ::max(f1,f2) << std::endl;
            std::string s1 = "mathematics";
            std::string s2 = "math";
            std::cout << "max(s1,s2): " << ::max(s1,s2) << std::endl;
            Normally, templates aren't compiled into single entities that can handle any type. Instead, different entities are generated from the template for every type for which the template is used.


            3 Note that no automatic type conversion is allowed here. Each must match exactly. For example:
            template <typename T>
            inline T const& max (T const& a, T const& b);

            max(4,7) // OK: T is int for both arguments
            max(4,4.2) // ERROR: first T is int, second T is double
            There are three ways to handle such an error:
            Cast the arguments so that they both match: max(static_cast<double>(4),4.2) // OK
            Specify (or qualify) explicitly the type of T: max<double>(4,4.2) // OK

            4 Class template usage:

            template <typenameTarget>
            class Singleton
            {
            public:
            static Target* Instance() //Static template member function should be impleted in the define of template
            {                                       //notes: it is not a thread safe
             if (m_pInstance==NULL)
              m_pInstance = new Target();

             return m_pInstance;
            }

            protected: //!!set the constructor and destructor to be protected to avoid unnecessary intance
             Singleton(); // constructor
             ~Singleton(); // destructor
            private:
             static  Target* m_pInstance;
            };

            //static class member initialisation should be global
            template <typename Target>
            Target* Singleton<Target>::m_pInstance = NULL;

            int main(int argc, _TCHAR* argv[])
            {
             int* testSingle = Singleton<int>::Instance();
             std::cout<<*testSingle<<std::endl;
            }

            4.1 Nontype Class Template Parameters
            Notype parameter provides a special way to define the property of template. But you cannot use floating-point numbers, class-type objects, and objects with internal linkage (such as string
            literals) as arguments for nontype template parameterstemplate <typename T, int MAXSIZE>
            class Stack {
            private:
            T elems[MAXSIZE]; // elements
            int numElems; // current number of elements
            }
            Stack<int,20> int20Stack; // stack of up to 20 ints

            6.1 The way that including declare and implemention of template in the header file is inclusion model. This kind of model is popular in the development. 
            7.1 The process of creating a regular class, function, or member function from a template by substituting actual values for its arguments is called template instantiation. This resulting entity (class, function, or member function) is generically called a specialization.
            posted on 2012-06-08 18:42 鷹擊長空 閱讀(215) 評論(0)  編輯 收藏 引用
            久久久国产精品网站| 久久AⅤ人妻少妇嫩草影院| 久久久久99精品成人片直播| 精品熟女少妇a∨免费久久| 99久久精品免费国产大片| 国产精品成人久久久| 久久精品国产亚洲AV无码娇色| 久久99精品久久久大学生| 欧美日韩精品久久久久| 亚洲美日韩Av中文字幕无码久久久妻妇| 无码精品久久一区二区三区| 色88久久久久高潮综合影院| 久久精品亚洲乱码伦伦中文| 久久精品水蜜桃av综合天堂| 久久人人添人人爽添人人片牛牛 | 无码超乳爆乳中文字幕久久| 久久最近最新中文字幕大全 | 久久国产精品一区| 国产精品久久久天天影视| 久久人人青草97香蕉| 久久夜色精品国产www| 欧美精品一本久久男人的天堂| 亚洲中文字幕无码一久久区| 中文字幕无码久久人妻| 精品无码久久久久久国产| 亚洲国产精品人久久| 欧美久久综合性欧美| 久久人人妻人人爽人人爽| 99久久精品免费| 国产精品一区二区久久精品| 91精品国产91久久久久久| 久久精品国产色蜜蜜麻豆| 一本一本久久aa综合精品| 日韩精品无码久久久久久| 久久精品亚洲福利| 日本精品久久久久影院日本| 国产精品成人久久久久三级午夜电影| 久久精品国产精品青草app| 亚洲国产精品久久久久婷婷老年 | 91精品观看91久久久久久| 91精品国产91久久久久久蜜臀|