• <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 鷹擊長空 閱讀(207) 評論(0)  編輯 收藏 引用
            激情久久久久久久久久| 久久e热在这里只有国产中文精品99| 久久午夜福利无码1000合集| 偷窥少妇久久久久久久久| 久久国产AVJUST麻豆| 久久久久久久精品成人热色戒| 99蜜桃臀久久久欧美精品网站 | 亚洲精品美女久久777777| 亚洲AV无码久久精品蜜桃| 久久久久久a亚洲欧洲aⅴ | 国产精品久久久久久一区二区三区| 久久这里只有精品久久| 亚洲精品国产自在久久| 精品久久久久久无码中文字幕一区| 久久精品国产亚洲Aⅴ香蕉 | 曰曰摸天天摸人人看久久久| 久久久无码精品亚洲日韩京东传媒| 久久久久高潮毛片免费全部播放| 久久久久久亚洲精品不卡| 久久人人爽人人爽人人AV| 午夜精品久久久久久久无码| 国产精品久久久久久一区二区三区| 无码任你躁久久久久久老妇| 国产精品VIDEOSSEX久久发布| 一本色道久久99一综合| 一本大道久久香蕉成人网| 久久九九久精品国产免费直播| 国产成人久久AV免费| 久久天天躁狠狠躁夜夜96流白浆| 中文字幕无码久久久| 久久九九免费高清视频 | 久久久久久久久久久| 久久亚洲中文字幕精品一区四 | 97r久久精品国产99国产精| 亚洲欧美成人综合久久久| 久久午夜福利无码1000合集| 伊色综合久久之综合久久| 亚洲精品乱码久久久久久不卡| 久久国产福利免费| 久久久精品国产Sm最大网站| 狠狠精品久久久无码中文字幕 |