• <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)  編輯 收藏 引用
            国产精品伊人久久伊人电影| 久久久这里有精品| 久久综合亚洲色一区二区三区| 深夜久久AAAAA级毛片免费看| 亚洲精品成人网久久久久久| 久久久久久曰本AV免费免费| 亚洲午夜久久久久久噜噜噜| 久久97精品久久久久久久不卡| 国产精品热久久毛片| 国产成人综合久久精品红| 久久99精品久久久久子伦| 国产精品欧美亚洲韩国日本久久| 国内高清久久久久久| 国产A级毛片久久久精品毛片| 手机看片久久高清国产日韩| 久久天堂电影网| 少妇久久久久久久久久| 亚洲欧洲中文日韩久久AV乱码| 国产精品久久久久国产A级| 香蕉久久夜色精品国产尤物| 996久久国产精品线观看| 久久国产免费直播| 久久电影网| 亚洲国产精品久久久久婷婷软件 | 九九精品久久久久久噜噜| 国产精品一久久香蕉产线看| 亚洲va久久久噜噜噜久久男同| 欧美久久一区二区三区| 91精品国产91久久| 久久99国产精品一区二区| 性高湖久久久久久久久| 伊人久久大香线蕉AV色婷婷色| 国产99久久久国产精品小说| 久久久久99精品成人片| 久久精品国产只有精品66| 国产精品一区二区久久精品无码| 久久91精品国产91久久麻豆| av无码久久久久不卡免费网站| 久久AV高清无码| 日本精品久久久久中文字幕| 99久久国产亚洲高清观看2024 |