• <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成人网人人软件| 国产精品禁18久久久夂久| 72种姿势欧美久久久久大黄蕉| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲AⅤ优女AV综合久久久| 亚洲精品国产美女久久久| 国产精品久久久久久久午夜片 | Xx性欧美肥妇精品久久久久久 | 国产精品99久久不卡| 精品综合久久久久久98| 亚洲伊人久久大香线蕉苏妲己| 亚洲国产精品无码久久SM| 91精品日韩人妻无码久久不卡| 伊人久久大香线蕉av不卡| 国产精品无码久久久久| 亚洲日韩中文无码久久| 亚洲精品综合久久| 女同久久| 少妇久久久久久被弄到高潮 | 少妇久久久久久久久久| 久久久综合香蕉尹人综合网| 久久婷婷成人综合色综合| 国产精品久久久久免费a∨| 人妻精品久久久久中文字幕| 久久精品国产精品亚洲人人| 久久精品国产精品亚洲| 久久久这里有精品中文字幕| 久久亚洲2019中文字幕| 亚洲国产成人久久综合野外| 亚洲七七久久精品中文国产 | 中文字幕久久精品| 亚洲国产天堂久久综合| 一本综合久久国产二区| 久久狠狠爱亚洲综合影院| 伊人久久大香线焦AV综合影院| 国内精品久久久久影院一蜜桃|