• <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年6月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(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 鷹擊長空 閱讀(208) 評論(0)  編輯 收藏 引用
            亚洲国产精品高清久久久| 色综合久久久久综合体桃花网| 欧美一级久久久久久久大| 亚洲中文字幕无码久久精品1| 国产精品久久久久AV福利动漫| 久久精品国产亚洲AV蜜臀色欲 | 久久国产免费直播| 久久国语露脸国产精品电影| 国产一久久香蕉国产线看观看| 久久久久久久久久免免费精品 | 久久只有这里有精品4| 综合久久国产九一剧情麻豆| 91久久精品国产成人久久| 久久婷婷人人澡人人爽人人爱| 精品久久香蕉国产线看观看亚洲| 亚洲精品无码久久毛片| 色综合久久中文综合网| 精品久久久久久中文字幕人妻最新| 狠狠色综合网站久久久久久久| 香蕉久久av一区二区三区 | 久久久久AV综合网成人 | 精品久久久久中文字幕一区| 久久无码人妻精品一区二区三区| 国产亚洲精久久久久久无码| 午夜精品久久久久久久无码| 久久久久国产精品| 久久99精品久久只有精品| 久久综合亚洲色一区二区三区| 久久久久九国产精品| 久久青青草原综合伊人| 久久天天躁狠狠躁夜夜96流白浆 | 日本免费一区二区久久人人澡| 99精品国产99久久久久久97 | 久久精品夜色噜噜亚洲A∨| 久久九九亚洲精品| 久久精品视频网| 午夜天堂精品久久久久| 久久综合中文字幕| 午夜精品久久久久久影视riav| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国产精品久久亚洲不卡动漫|