• <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)  編輯 收藏 引用
            囯产精品久久久久久久久蜜桃| 亚洲午夜无码久久久久| 久久综合给合综合久久| 国内精品欧美久久精品| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 无码人妻久久一区二区三区免费丨| 久久精品一本到99热免费| 91精品国产综合久久香蕉 | 国产精品久久久久久久人人看 | 久久精品成人| 久久国产高潮流白浆免费观看| 精品久久久久久无码中文野结衣 | 久久er国产精品免费观看8| 日本强好片久久久久久AAA| 久久免费观看视频| 91精品国产乱码久久久久久| 亚洲一区精品伊人久久伊人| 亚洲午夜精品久久久久久人妖| 伊人久久精品无码av一区| 欧洲性大片xxxxx久久久| 大香网伊人久久综合网2020| 高清免费久久午夜精品| 少妇人妻88久久中文字幕| 三级片免费观看久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区| 亚洲色欲久久久久综合网| 久久夜色精品国产www| 国产叼嘿久久精品久久| 国产精品热久久毛片| 91精品国产91久久久久久青草| 精品久久久久久久久午夜福利 | 青青草国产精品久久| 青青青青久久精品国产| 色综合色天天久久婷婷基地| 国产精品久久国产精麻豆99网站| 奇米综合四色77777久久| 久久精品亚洲一区二区三区浴池| 久久久久亚洲av无码专区喷水| 色欲综合久久中文字幕网| 国产亚洲精久久久久久无码| 久久九九精品99国产精品|