• <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
            <2009年12月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(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无码精品浪潮| 久久久久国产成人精品亚洲午夜| 亚洲国产精品无码久久久蜜芽| 精品国产乱码久久久久软件| 91久久精品91久久性色| 久久高潮一级毛片免费| 欧美va久久久噜噜噜久久| 青青青青久久精品国产h| 2020久久精品亚洲热综合一本| 精品国产乱码久久久久久郑州公司| 久久精品国产一区二区三区不卡| 77777亚洲午夜久久多喷| 国产精品va久久久久久久| 亚洲国产欧洲综合997久久| 久久99精品国产99久久6| 2021少妇久久久久久久久久| 亚洲伊人久久成综合人影院 | 久久青青草原国产精品免费| 久久亚洲高清综合| 久久中文娱乐网| 久久综合给久久狠狠97色| 2019久久久高清456| 国产成人无码精品久久久免费| 久久无码中文字幕东京热| 精品熟女少妇aⅴ免费久久| 国产亚洲精品自在久久| 少妇久久久久久被弄高潮| 久久久久高潮综合影院| 久久精品桃花综合| 亚洲国产成人精品女人久久久| 亚洲伊人久久大香线蕉苏妲己| 国产精品久久久久…| 久久久久久久人妻无码中文字幕爆| 成人久久免费网站| 久久精品国产99久久久古代| 波多野结衣久久一区二区 | 久久久精品日本一区二区三区| 91麻精品国产91久久久久| 久久久亚洲精品蜜桃臀| 久久久99精品成人片中文字幕| 久久精品亚洲乱码伦伦中文|