• <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年12月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿(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)  編輯 收藏 引用
            久久久久国产精品人妻| 久久婷婷国产综合精品| 人妻中文久久久久| 日韩欧美亚洲综合久久| 2021精品国产综合久久| 国産精品久久久久久久| 久久99国产精品久久99小说 | 久久99热国产这有精品| 国产A级毛片久久久精品毛片| 性高湖久久久久久久久AAAAA| www.久久热.com| 99久久精品国产一区二区 | 久久se精品一区二区影院 | 亚洲国产精品高清久久久| 精品久久人人做人人爽综合| 性欧美丰满熟妇XXXX性久久久| 久久午夜综合久久| 久久国产乱子精品免费女| 97精品依人久久久大香线蕉97| 久久精品成人欧美大片| 99久久精品影院老鸭窝| 久久精品国产精品亚洲毛片| 中文精品久久久久人妻不卡| 性做久久久久久久久老女人| 99久久无码一区人妻| 久久精品www| 热re99久久精品国产99热| 国产日产久久高清欧美一区| 亚洲AV日韩精品久久久久久久| 色婷婷噜噜久久国产精品12p| 久久久久亚洲爆乳少妇无| 精品久久久无码中文字幕天天 | 久久综合狠狠综合久久综合88| 国产精品乱码久久久久久软件 | 国内精品综合久久久40p| 亚洲欧美另类日本久久国产真实乱对白| 99久久精品国产一区二区| 99久久亚洲综合精品成人| 精品国产婷婷久久久| 区亚洲欧美一级久久精品亚洲精品成人网久久久久| 91精品国产色综久久|