• <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 閱讀(451) 評論(0)  編輯 收藏 引用 所屬分類: Template
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

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

            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香蕉久| 国产综合久久久久久鬼色| 一本久道久久综合狠狠躁AV| 国产欧美一区二区久久| 久久久噜噜噜久久中文字幕色伊伊 | 国产亚洲精久久久久久无码AV| 99精品久久久久久久婷婷| 国产99久久久国产精免费| 久久久久久久久无码精品亚洲日韩| 久久国产香蕉视频| 精品久久久久久久久中文字幕| 麻豆av久久av盛宴av| 久久AAAA片一区二区| 亚洲国产二区三区久久| 久久精品无码午夜福利理论片| 午夜精品久久久久久久无码| 国产福利电影一区二区三区久久老子无码午夜伦不 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 色欲久久久天天天综合网| 伊人 久久 精品| 亚洲国产成人久久综合一区77| 久久国产精品视频| 激情久久久久久久久久| 久久免费精品视频| 国产成人久久AV免费| 91精品国产9l久久久久| 久久久女人与动物群交毛片| 色综合久久久久无码专区| 日日噜噜夜夜狠狠久久丁香五月| 少妇精品久久久一区二区三区| 久久久精品国产sm调教网站 | 久久婷婷国产剧情内射白浆|