• <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>
            posts - 297,  comments - 15,  trackbacks - 0
            If we want to define a different implementation for a template when a specific type is passed as template parameter, we can declare a specialization of that template.

            For example, let's suppose that we have a very simple class called mycontainer that can store one element of any type and that it has just one member function called increase, which increases its value. But we find that when it stores an element of type char it would be more convenient to have a completely different implementation with a function member uppercase, so we decide to declare a class template specialization for that type:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            // template specialization
            #include <iostream>
            using namespace std;

            // class template:
            template <class T>
            class mycontainer {
            T element;
            public:
            mycontainer (T arg) {element=arg;}
            T increase () {return ++element;}
            };

            // class template specialization:
            template <>
            class mycontainer <char> {
            char element;
            public:
            mycontainer (char arg) {element=arg;}
            char uppercase ()
            {
            if ((element>='a')&&(element<='z'))
            element+='A'-'a';
            return element;
            }
            };

            int main () {
            mycontainer<int> myint (7);
            mycontainer<char> mychar ('j');
            cout << myint.increase() << endl;
            cout << mychar.uppercase() << endl;
            return 0;
            }
            8
            J


            This is the syntax used in the class template specialization:

             
            template <> class mycontainer <char> { ... };


            First of all, notice that we precede the class template name with an empty template<> parameter list. This is to explicitly declare it as a template specialization.

            But more important than this prefix, is the <char> specialization parameter after the class template name. This specialization parameter itself identifies the type for which we are going to declare a template class specialization ( char). Notice the differences between the generic class template and the specialization:

            1
            2
            template <class T> class mycontainer { ... };
            template <> class mycontainer <char> { ... };


            The first line is the generic template, and the second one is the specialization.

            When we declare specializations for a template class, we must also define all its members, even those exactly equal to the generic template class, because there is no "inheritance" of members from the generic template to the specialization.

            from:
            http://www.cplusplus.com/doc/tutorial/templates/

            posted on 2010-05-03 22:11 chatler 閱讀(456) 評論(0)  編輯 收藏 引用 所屬分類: Template
            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品免费久久久久久久久| 香蕉久久夜色精品升级完成| 国产精品久久久久久福利漫画| 久久精品国产亚洲AV无码麻豆| 久久久久久久99精品免费观看| 久久久久这里只有精品 | 亚洲精品乱码久久久久久按摩 | 国产一区二区久久久| 99999久久久久久亚洲| 香蕉99久久国产综合精品宅男自| 无码专区久久综合久中文字幕| www亚洲欲色成人久久精品| 狠狠色婷婷久久一区二区| 国产精品青草久久久久福利99| 亚洲va久久久噜噜噜久久天堂| 精品水蜜桃久久久久久久| 久久丫精品国产亚洲av| 2021国产精品午夜久久| 日韩美女18网站久久精品| 久久精品国产91久久麻豆自制| 99久久做夜夜爱天天做精品| 久久av免费天堂小草播放| 久久国产精品无码HDAV| 精品人妻伦九区久久AAA片69| 久久久亚洲精品蜜桃臀| 亚洲国产成人久久综合一| 亚洲国产另类久久久精品小说| 人妻无码精品久久亚瑟影视| 日本免费久久久久久久网站| 国产成人精品久久一区二区三区| 久久妇女高潮几次MBA| 欧美激情一区二区久久久| 少妇无套内谢久久久久| 伊人色综合九久久天天蜜桃| 久久综合久久综合亚洲| 亚洲国产香蕉人人爽成AV片久久 | 性欧美大战久久久久久久久| 中文字幕无码免费久久| 中文字幕日本人妻久久久免费| 欧美午夜精品久久久久免费视| 亚洲精品无码久久久久|