• <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>
            隨筆 - 25  文章 - 29  trackbacks - 0
            <2007年4月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(4)

            隨筆分類(22)

            隨筆檔案(25)

            文章分類(2)

            文章檔案(2)

            相冊(cè)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 56437
            • 排名 - 404

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            ????????????????????????????? 這幾天看了下模板 ,以下是個(gè)人的些心得,高手見(jiàn)笑了
            1.類模版 實(shí)例 對(duì)象定義 引起 實(shí)例化
            ??????????????????????????? 指針,引用 不會(huì)引起實(shí)例化
            類非型參數(shù)? 只能是 整形,枚舉,外聯(lián)結(jié),且應(yīng)為一個(gè)常量編譯時(shí)就應(yīng)確定
            ??????????????????? 浮點(diǎn)型,類類型,。。。都不可以
            2.class templates 的成員函數(shù) 在調(diào)用和取地址時(shí)實(shí)例化,在類實(shí)例化時(shí)不會(huì)自動(dòng)實(shí)例化
            3.class templates 的友元申明
            ??? a.非模版類型
            ????????? friend class man;
            ????????? friend void f(void);
            ?????????? friend void man::f(void);
            ?? b.一對(duì)一的模版友元
            ???????????? friend class man<T>;
            ???????????? friend void f<T>( man<T>);
            ?????????????friend void man<T>::f();
            ??? c.一對(duì)多的模版友元
            ????????? template <typename T>
            ?????????????? friend class man;
            ?????????? template <typename T>
            ????????????? friend void? f( T);
            ?????????? template <typename T>
            ????????????? friend void man<T>::f();
            4.類模版的靜態(tài)成員
            ????? 并不在模版定義時(shí)實(shí)例化,在類模版實(shí)例化時(shí)實(shí)例化,對(duì)應(yīng)1個(gè)類型
            template <typename T>
            int man<T>::size=10;
            而成員函數(shù)應(yīng)為
            ? template <typename T>
            ?? void man<T>::f(void)
            {
            ..........................................
            }
            5.成員模版 可以是普通類和 模版類
            如:
            class woman????????????????????????????????????????????
            {
            public:
            ?template <typename T>
            ??class man
            ?{
            ?public:
            ??print(T a)
            ??{
            ???cout<<a;
            ???
            ??}

            ?};
            ?template <typename T2>
            ??void print(T2 a)
            ?{
            ??cout<<a;
            ?};
            protected:
            private:
            };
            ???????????????????????? 1個(gè)好的例子
            ?????????????????????????? template?<typename T>?? class A??
            ??????????????????????????????? {??????public:
            ????????????????????????????????????????????????????? template <typename T1>???????????????
            ????????????????????????????????????????????????????? A&??? operator =(const A<T1> & );
            ?????????????????????????????? }
            ???????????????????????????????如此 則A 的對(duì)象 可以用其他型的對(duì)象賦值了
            ???? 在使用時(shí)才實(shí)例化
            ??????????????????????????????????????? 但是其定義比較駭人
            ???????????????????????? template <typename T>
            ???????????????????????????????????? template<typename T1>
            ???????????????????????????????????? A<T>&? A<T>::operator=(const A<T1>& a)
            ?????????????????????????????????? {? ...........................}



            6.類模版的特化
            ????? 特化1個(gè)類模板(所有成員必須特化包括靜態(tài)類數(shù)據(jù)成員(vc),但友元模板(1:1)可以
            不特化,當(dāng)作一個(gè)顯示實(shí)參的函數(shù)模板處理即可) 或 特化1個(gè)模板 成員函數(shù)

            ?????????模板成員函數(shù)特化是定義必須出現(xiàn)在實(shí)現(xiàn)文件(cpp)中
            ?????? 語(yǔ)法為
            ??? void man<int>::f(void)
            {
            ............................
            }
            ??????
            類特化
            ?template <>
            class man<int>
            {
            ?????? ......//中所有類型參數(shù)以int 替代
            };
            ??????
            ??man<int>::man()
            {
            ......
            }

            void man<int>::f(void)
            {
            }
            注意? 類成員中
            ?? static const 有序類型可以在體內(nèi)初始化static const int a=10;
            ??????????????????????? 僅僅static? 必須在體外
            ?????????????????????????????????????????????????????????????? static int a;
            ????????????????????????????????????????????????????????????? int?woman::a=10;
            ???非 特化
            ?? template <typename T>
            ?? int man<T>::size=10;
            ?? 特化
            ?? int man<char>::size=10;
            7偏特化
            ?? 類模板有1個(gè)以上模版參數(shù)(類型參數(shù),非類型參數(shù))
            ????????????? 某些模版參數(shù) 被實(shí)際的型和值取代(注意是 取代 ,不是增加,減少)
            ????? 如:

            //////////////////頭文件
            ?????? template <typename T1,typename T2,int size>
            class wc
            {
            public:
            ?wc()
            ?{
            ??cout<<"\n int T1,T2, int";
            ?}
            protected:
            private:
            };
            template <typename T,int size>
            class? wc<T* ,T,size>
            {
            public:
            ?wc()
            ?{
            ??cout<<"\n in T *, T ,size";
            ?}
            protected:
            private:
            };
            template <typename T,int size>
            class? wc<T* ,float,size>
            {
            public:
            ?wc()
            ?{
            ??cout<<"\n in T* ,float,size";
            ?}
            protected:
            private:
            };
            template <typename T>
            class? wc<T* ,float,80>
            {
            public:
            ?wc()
            ?{
            ??cout<<"\n in T* ,float,80";
            ?}
            protected:
            private:
            };
            ///////頭文件
            //////main()
            wc<int,float,10> wc1;
            ?wc<int* ,int ,20> wc2;
            ?wc<int*,float,39> wc3;
            wc<int*,float,80>wc4;
            ///////main() ,在vc 7 上通過(guò)
            //////main()


            8.預(yù)設(shè)模板參數(shù)(只有在類模板中才指定 ,1 .? 明確指定 a<int,int>?? ,直接定義時(shí) man<>? kkk;2. a<T,T> )
            template <typename T,typename T1=float>
            class man
            {
            ..........
            }

            寫到這里突然想到
            ????????????????? class A {
            ????????????????????????????virtual void?? print();
            ????????????????????????????? };
            ????????????????? class B:public A {
            ????????????????????????????????????????? virtual void print();
            ????????????????????????????????????????? };
            B b;
            ???????????????? A *a =&b;
            ??????????????? a->print();//調(diào)用 B的,此時(shí) print()中的this 指針是?B * const,使用B 的接口?;

            9.雙重模板參數(shù)(很有用)
            ??????????????? template <typename T,typename G =man<T> >
            ?class baby
            ?{
            ?public:
            ? baby ()
            ? {
            ?? cout<<"\n in baby";
            ? }
            ?protected:
            ?private:
            ?};//類型參數(shù)可以是 類類型
            ????????
            baby<int, man<float> > b;? //ok
            ////////////////////////
            template <typename T,template <typename G> class TT>//可以省略為 template <typename T? ,template<typename>??class??TT>
            ?class? son
            ?{
            ?public:
            ?? TT<T> * a;?
            ???? son()
            ??{
            ?????????? a=0;
            ???cout<<"\n in son";
            ??}
            ?protected:
            ?private:
            ?};
            ?? son<int, man> b;//則就含有了 man<int > * a;
            TT 是模板占位符號(hào),是一個(gè)帶1個(gè)類型參數(shù)的類模板,如果其有默認(rèn)模板參數(shù) 則忽略掉??
            所以?GG若帶默認(rèn) 的模板 應(yīng)該如下
            ??????????? template <typename T, template <typename T2, typename= man<T2>? > class GG>
            class son
            {
            }

            /////////?? 類模板類型參數(shù) 同時(shí)還可以是 類模板

            10. 字符串常量在模板中的注意事項(xiàng)

            ?????????? char * a="hi ,friend ";///"hi, friend"? 文字常量 是 const char [10] 類型? 左值轉(zhuǎn)換到 const char *
            限定轉(zhuǎn)換到 char *,
            ??????????????? template <typename T〉
            ????? ostream& operator <<(ostream & os, const T & b);//注意只有const?才能接受臨時(shí)變量

            ???????????? cout<<"hi,friend";??
            ????????????? cout<<"bad";
            /////2個(gè)不同的模板實(shí)例
            ?? typeid(變量).name();///直接打印出變量類型
            寫到這,閑扯下:
            ??? 棧區(qū),堆區(qū),全局(靜態(tài))區(qū),文字常量,代碼區(qū),5個(gè)大區(qū),這個(gè)是我聽(tīng)說(shuō)的
            ////////////////////////////////////////////////
            11.模板的編譯模型
            ???? 在實(shí)例化點(diǎn)必須能找到定義//原則
            ?????????????????????????? 只能使用包含模式了,
            a..h. cpp?在?.h最后一行包含進(jìn) cpp
            b.?全部在h?或 cpp

            ?????????????????????分離模式,目前支持的export 關(guān)鍵字i的編譯器很少(vc.net 不支持)


            12.
            函數(shù)指針類型也能做模板類型參數(shù)

            bool ?minn( int ?a, int ?b)
            {
            ?????
            return ?a < b;
            ?}


            ?template?
            < typename?T1,typename?T2 >
            ????
            const ?T1 & ??mymin( const ?T1 & ?t1,? const ?T1 & ?t2,?T2?t3?)
            ?
            {
            ?????
            return ?t3(t1,t2) ? t1:t2;
            ?}

            void ?main()
            {
            cout
            << mymin( 2 , 3 ,minn);
            }


            13.
            模板參數(shù)可以是個(gè)類模板??
            template <typename T>
            class a
            {
            };
            a< vector <int> >;


            template <typename T, typename T2,template <typename T,typename T2> class con? >
            void add(con<T,T2>,con<T,T2>)
            {
            ?cout<<"ok";
            }

            add(a,b)//特殊在于 需要推導(dǎo),vc 7 可以從? 類模板中推導(dǎo)出參數(shù)類型

            template <typename T,template <typename T2,typename T3> class con >
            class ggoo
            {
            public:
            ?con<T,T> a;
            con<int,int> b;

            protected:
            private:
            };

            ggoo<int,double, b> kk;//b<int,double>, con 的模板參數(shù)可以任意
            ?

            posted on 2006-05-27 17:55 黃大仙 閱讀(6154) 評(píng)論(3)  編輯 收藏 引用 所屬分類: c++

            FeedBack:
            # re: 類模板(原創(chuàng)) 2007-04-11 10:50 @王一偉
            好文,哈哈,下班了慢慢看看你寫的  回復(fù)  更多評(píng)論
              
            # re: 類模板(原創(chuàng)) 2009-06-06 17:33 鳴人
            可以。  回復(fù)  更多評(píng)論
              
            # re: 類模板(原創(chuàng)) 2010-03-26 22:52 nomatter9
            謝謝了  回復(fù)  更多評(píng)論
              
            久久精品国产99久久久古代| 99久久精品国产综合一区| 亚洲国产成人久久综合一区77| 国产免费久久精品99久久| 欧美国产成人久久精品| 亚洲人成电影网站久久| 久久久久99精品成人片直播| 久久精品国产亚洲网站| 久久99国产精品成人欧美| 狠狠色丁香久久婷婷综合_中| 国内精品综合久久久40p| 99久久精品国产高清一区二区| 国产精品久久久久一区二区三区| 欧美国产精品久久高清| 久久国产欧美日韩精品| 婷婷久久综合九色综合九七| .精品久久久麻豆国产精品| 久久99国产精品成人欧美| 久久婷婷激情综合色综合俺也去| 青青青青久久精品国产h| 欧美黑人激情性久久| 国产精品久久久久久福利漫画 | 伊人久久精品无码av一区| 久久九九青青国产精品| 亚洲国产天堂久久综合| 69SEX久久精品国产麻豆| 99久久做夜夜爱天天做精品| 国产香蕉97碰碰久久人人| 精品蜜臀久久久久99网站| 亚洲精品午夜国产va久久| 久久久精品日本一区二区三区| www.久久热.com| 欧美熟妇另类久久久久久不卡| 香蕉久久影院| 国产午夜福利精品久久| 国产精品久久久久久影院 | 99久久婷婷国产一区二区| 欧洲成人午夜精品无码区久久 | 久久久久久久亚洲精品| 日本免费一区二区久久人人澡| 国产91色综合久久免费|