• <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)  編輯 收藏 引用
            精品国产乱码久久久久久1区2区| 99久久精品日本一区二区免费| 欧美亚洲色综久久精品国产| 婷婷国产天堂久久综合五月| 久久天天躁狠狠躁夜夜不卡| 精品久久久久久无码国产| 久久久久久综合一区中文字幕| 99热精品久久只有精品| 人人妻久久人人澡人人爽人人精品| 无码任你躁久久久久久| 久久亚洲中文字幕精品有坂深雪| 狠狠色丁香婷婷久久综合不卡| 亚洲日本久久久午夜精品| AV无码久久久久不卡蜜桃| 国产免费久久久久久无码| 久久99精品久久久久婷婷| 亚洲欧美一级久久精品| 精品久久久久久久久午夜福利| 女人高潮久久久叫人喷水| 中文字幕亚洲综合久久| 午夜不卡888久久| 亚洲乱亚洲乱淫久久| 久久r热这里有精品视频| 91精品国产综合久久久久久| 久久人人爽人人爽人人片AV不| 久久精品免费一区二区| 久久精品国产免费观看三人同眠| 狠狠色丁香久久婷婷综合| 中文字幕日本人妻久久久免费 | 久久人人爽人人爽人人片AV东京热 | 国产精品一区二区久久不卡| 中文字幕乱码人妻无码久久| 久久亚洲美女精品国产精品| 国产99久久精品一区二区| 国产精品久久久久久影院| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久综合狠狠综合久久97色| 亚洲综合久久夜AV | 国产99久久精品一区二区| 久久精品国产亚洲av麻豆蜜芽| 久久久久久国产精品免费无码|