• <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
            <2010年3月>
            28123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            常用鏈接

            留言簿(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 鷹擊長空 閱讀(209) 評論(0)  編輯 收藏 引用
            国内精品久久国产大陆| 亚洲精品无码久久千人斩| 精品精品国产自在久久高清| 久久精品国产久精国产| 久久一区二区三区免费| 久久婷婷五月综合色奶水99啪| 亚洲国产精品无码久久| 国产激情久久久久影院老熟女| 久久精品国产99久久久古代| 精品久久777| 国产成人精品综合久久久久| 狠色狠色狠狠色综合久久 | 久久久久97国产精华液好用吗| 久久精品桃花综合| 精品欧美一区二区三区久久久| 7777精品久久久大香线蕉 | 伊人久久无码精品中文字幕| 久久线看观看精品香蕉国产| 久久天天躁狠狠躁夜夜2020一| 66精品综合久久久久久久| 人妻丰满AV无码久久不卡 | 久久www免费人成精品香蕉| 久久成人国产精品| 18岁日韩内射颜射午夜久久成人| 久久久久婷婷| 久久一区二区三区免费| 精品久久久久中文字幕一区| 色成年激情久久综合| 国产精品一久久香蕉国产线看观看| 亚洲国产日韩欧美久久| 一本久久a久久精品综合香蕉| 亚洲综合久久综合激情久久| A狠狠久久蜜臀婷色中文网| 色婷婷综合久久久久中文一区二区 | 综合久久精品色| 色综合久久中文字幕综合网| 久久精品国产精品亚洲下载| 久久国产综合精品五月天| 激情综合色综合久久综合| 精品无码久久久久久久久久| 国产精品青草久久久久福利99|