锘??xml version="1.0" encoding="utf-8" standalone="yes"?>免费一级欧美大片久久网,日本久久久精品中文字幕,久久久一本精品99久久精品66 http://www.shnenglu.com/cuigang/articles/38824.htmlcuigangcuigangMon, 17 Dec 2007 14:16:00 GMThttp://www.shnenglu.com/cuigang/articles/38824.htmlhttp://www.shnenglu.com/cuigang/comments/38824.htmlhttp://www.shnenglu.com/cuigang/articles/38824.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38824.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38824.html 
2.5 鍨嬪埆瀵瑰瀷鍒殑鏄犲皠錛圱ype-to-Type Mapping錛?br> 
濡傚墠鎵榪幫紝涓嶅彲浠ュtemplate鍑芥暟鍋忕壒鍖栥傚鏈変笅闈㈡ā鏉垮嚱鏁幫細(xì)

1 template<class T, class U>
2 T* Create(const U& arg)
3 {
4     return new T(arg);
5 }


鐢ㄦ潵鏋勯犱竴涓璞°傚亣璁劇幇鍦ㄦ湁涓涓獁idget瀵硅薄鐨勬瀯閫犲嚱鏁伴渶瑕佷袱涓弬鏁幫紝絎簩涓浐瀹氫負(fù)-1銆傞偅涔堜綘娌℃湁鍔炴硶濡備笅鍋忕壒鍖栵紝濡傛灉浣犲啓涓涓狢reateWidget()鏉ヨВ鍐籌紝浣犲皢涓嶈兘鍦ㄦ硾鍨嬬▼搴忎腑浣跨敤銆?br>
1 //紺烘剰浠g爜錛岃鍕挎ā浠?/span>
2 template <class U>
3 widget* Create<widget, U>(const U& arg)
4 {
5     return new widget(arg, -1);
6 }


鎴戜滑鍙互閫氳繃閲嶈澆鏈哄埗鏉ュ疄鐜幫紝姣斿浼犲叆涓涓瀷鍒負(fù)T鐨勫艦鍙傦細(xì)

 1 template < class T, class U>
 2 T* Create(cosnt U& arg, T /* dummy */)
 3 {
 4     return new T(arg);
 5 }
 6 template <class U>
 7 widget* Create(const U& arg, widget /* dummy */)
 8 {
 9     return new widget(arg, -1);
10 }


浣嗘槸鐢變簬褰㈠弬鐨勪紶鍏ワ紝鎴戜滑鏋勯犱簡涓涓復(fù)鏃跺璞★紝閫犳垚棰濆寮閿銆傛垜浠渶瑕佷竴涓交閲忕駭鐨処D銆傚氨鏄疶ype2Type錛?br>
1 template <typename T>
2 struct Type2Type
3 {
4  typedef T OriginalType;
5 };
6 

瀹冩病鏈変換浣曟暟鍊鹼紝浣嗗畠浠悇鑷笉鍚屽瀷鍒傞偅涔堬紝鐜板湪鍙互榪欐牱鍐欙細(xì)

 1 //渚濋潬閲嶈澆鍜孴ype2Type
 2 template <class T, class U>
 3 T* Create(const U& arg, Type2Type<T>)
 4 {
 5     return new T(arg);
 6 }
 7 template <class U>
 8 widget* Create(const U& arg, Type2Type<widget>)
 9 {
10     return new widget(arg, -1);
11 }
12 //cleint's code
13 String* pStr = Create("hello", Type2Type<string>());
14 widget* pW = Create(100, Type2Type<widget>());


絎簩涓弬鏁板彧鏄敤鏉ラ夋嫨閫傚悎鐨勯噸杞藉嚱鏁般?br> 
 


cuigang 2007-12-17 22:16 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙涔?jié)锛?jí)http://www.shnenglu.com/cuigang/articles/38823.htmlcuigangcuigangMon, 17 Dec 2007 14:15:00 GMThttp://www.shnenglu.com/cuigang/articles/38823.htmlhttp://www.shnenglu.com/cuigang/comments/38823.htmlhttp://www.shnenglu.com/cuigang/articles/38823.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38823.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38823.html 
2.4 甯告暣鏁版槧灝勪負(fù)鍨嬪埆

浠ヤ笅妯℃澘錛?br>
1 template < int v >
2 struct Int2Type{
3     enum { value = v };
4 }


Int2Type浼?xì)鏍规嵁寮曟暟鎵寰楃殑涓嶅悓鏁板兼潵浜х敓涓嶅悓鍨嬪埆銆侷nt2Type<0> 鍜?Int2Type<1>鏄袱縐嶄笉鍚岀殑綾誨瀷銆傞噰鐢↖nt2Type鍙牴鎹紪璇戞湡璁$畻鍑烘潵鐨勭粨鏋滈夌敤涓嶅悓鐨勫嚱鏁般傚疄闄呬笂浣犲彲浠ヨ繍鐢ㄤ竴涓父鏁拌揪鍒伴潤鎬佸垎媧懼姛鑳姐?br>
涓鑸岃█錛岀鍚堜笅鍒椾袱涓潯浠跺彲浣跨敤Int2Type錛?br>
a.鏈夊繀瑕佹牴鎹煇涓紪璇戞湡甯告暟璋冪敤涓涓垨鏁頒釜涓嶅悓鐨勫嚱鏁般?br>b.鏈夊繀瑕佸湪緙栬瘧鏈熷疄鏂?#8220;鍒嗘淳”銆?br>
榪愯鏃跺垎媧懼彲浠ヤ嬌鐢╥f...else...鎴杝witch銆備絾鏈夋椂闅句互鍋氬埌銆備婦渚嬪涓嬶細(xì)

鍋囪涓涓鍣∟iftyContainer錛?br>
1 template <class T> class NiftyContainer{};


鍏跺唴鍚寚閽堬紝鎸囧悜 T 鐨勫璞°備負(fù)浜嗗鍒跺鍣ㄤ腑鏌愪釜瀵硅薄錛屼綘鎯寵皟鐢╟opy鏋勯犲嚱鏁幫紙闈炲鎬侊級(jí)鎴栬櫄鍑芥暟Clone()錛堝鎬侊級(jí)銆備絾浣犳棤娉曡繖鏍峰仛錛?br>
 1 template < typename T, bool isPolymorphic>
 2 class NiftyContainer{
 3     void DoSomething(){
 4         T* pSomeObj = ;
 5         if (isPolymorphic){
 6             T* pNewObj = pSomeObje->Clone();
 7             //
 8         }else{
 9             T* pNewObj = new T(*pSomeObj);
10             //
11         }
12 };


浣犱細(xì)鍙戠幇緙栬瘧涓嶈繃錛岀紪璇戝櫒浼?xì)鍙戠幇鏈畾涔夌殑鍑芥暟銆傝孖nt2Type鎻愪緵浜嗕竴涓姙娉曪細(xì)

 1 template <typename T, bool isPolymrphoic>
 2 class NiftyContainer{
 3 private:
 4     void DoSomething(T* pObj, Int2Type<true>){
 5         T* pNewObj = pSomeObje->Clone();
 6         //  
 7     }
 8     void DoSomething(T* pObj, Int2Type<false>){
 9         T* pNewObj = new T(*pSomeObj);
10         //
11     }
12 public:
13     void DoSomething(T* pObj){
14         DoSomething(pObj, Int2Type<isPolymorphoic>());
15     }
16 };


涓昏鍘熷洜鏄紪璇戝櫒涓嶄細(xì)鍘葷紪璇戜竴涓湭琚敤鍒扮殑template鍑芥暟銆?br> 


cuigang 2007-12-17 22:15 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙鍏級(jí)http://www.shnenglu.com/cuigang/articles/38822.htmlcuigangcuigangMon, 17 Dec 2007 14:13:00 GMThttp://www.shnenglu.com/cuigang/articles/38822.htmlhttp://www.shnenglu.com/cuigang/comments/38822.htmlhttp://www.shnenglu.com/cuigang/articles/38822.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38822.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38822.html 
2.3 灞閮ㄧ被

浣犲彲浠ュ湪鍑芥暟涓畾涔塩lass錛?br>
1 void Fun(){
2     class Local{}; 
3 }


涓嶈繃鏈変簺闄愬埗錛宭ocal class涓嶈兘瀹氫箟闈欐佹垚鍛樺彉閲忥紝涔熶笉鑳借闂潪闈欐佸眬閮ㄥ彉閲忋備絾瀹冨彲浠ョ敤浜庢ā鏉垮嚱鏁幫細(xì)

 1 class Interface{
 2 public:
 3     virtual void Fun()=0;
 4 };
 5 
 6 template <class T, class P>
 7 Interface* MakeAdapter(const T& obj, const P& arg)
 8 {
 9     class Local : public Interface{
10     public:
11         Local(const T& obj, const P& arg)
12             : obj_(obj), arg_(arg){};
13         virtual void Fun(){
14             obj_.Call(arg_);
15         }
16     private:
17         T obj_;
18         P arg_;
19     };
20     return new Local(obj, arg);
21 };


浜嬪疄璇佹槑錛屼換浣昹ocal classes鐨勬柟娉曢兘鍙互鐢?#8220;鍑芥暟澶栫殑妯℃澘綾?#8221;鏉ュ畬鎴愶紝涔熷氨鏄錛屽茍闈炲緱灞閮ㄧ被涓嶅彲銆備笉榪囷紝灞閮ㄧ被鍙互鎻愰珮絎﹀彿鐨勫湴鍩熸э紝濡備笂渚嬶紝Local涓嶈兘鍦ㄥ嚱鏁板琚戶鎵匡紝綾諱技Java鐨刦inal銆?br>
11绔犲皢搴旂敤浜х敓鎵璋?#8220;寮圭哀鍨?#8221;鍑芥暟錛坱rampoline functions錛夈?br>



cuigang 2007-12-17 22:13 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙涓冿級(jí)http://www.shnenglu.com/cuigang/articles/38821.htmlcuigangcuigangMon, 17 Dec 2007 14:12:00 GMThttp://www.shnenglu.com/cuigang/articles/38821.htmlhttp://www.shnenglu.com/cuigang/comments/38821.htmlhttp://www.shnenglu.com/cuigang/articles/38821.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38821.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38821.html 
2.2 妯℃澘鍋忕壒鍖?br>
妯℃澘鍋忕壒鍖栬浣犲湪template鐨勬墍鏈夊彲鑳藉疄浣撲腑鐗瑰寲鍑轟竴緇勫瓙闆嗐傚錛?br>
1 
2 template < class Window, class Controller>
3 class Widget{};


浣犲彲浠ヨ繖鏍峰姞浠ョ壒鍖栵細(xì)

1 template <>
2 class Widget<ModalDialog, MyController>
3 {};


鍏朵腑錛孧odalDialog 鍜?MyController 鏄彟澶栧畾涔夌殑綾匯?br>鏈夋椂鍊欙紝浣犻渶瑕侀拡瀵逛換鎰弚indow騫舵惌閰嶄竴涓壒瀹氱殑MyController鏉ョ壒鍖朩idget錛岃繖鏃跺欏氨闇瑕佹ā鏉垮亸鐗瑰寲銆?br>
1 template < class Window >
2 class Widget < Window, MyController>
3 {};


榪樺彲浠ユ嬁浠繪剰Button鏉ュ亸鐗瑰寲錛?br>
1 template <class ButtonArg>
2 class Widget<Button<ButtonArg>, MyController>
3 {};


緙栬瘧鍣ㄤ細(xì)灝濊瘯鎵懼嚭鏈鍖歸厤鐨勫畾涔夈備絾榪欐牱鐨勬満鍒朵笉鑳界敤鍦ㄥ嚱鏁拌韓涓婏紝鏃犺鏄垚鍛樺嚱鏁拌繕鏄潪鎴愬憳鍑芥暟銆?br>

cuigang 2007-12-17 22:12 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙鍏級(jí)http://www.shnenglu.com/cuigang/articles/38820.htmlcuigangcuigangMon, 17 Dec 2007 14:10:00 GMThttp://www.shnenglu.com/cuigang/articles/38820.htmlhttp://www.shnenglu.com/cuigang/comments/38820.htmlhttp://www.shnenglu.com/cuigang/articles/38820.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38820.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38820.html 
2.1 緙栬瘧鏈熸柇璦

鏈夋椂鍊欙紝鎴戜滑鐨勬柇璦鍏跺疄鍦ㄧ紪璇戞椂灝卞彲浠ュ垽鏂湡鍋囷紝浜庢槸鏈夌紪璇戞椂鏂█銆備緥濡傚姝ゅ疄鐜幫細(xì)

1 #define STATIC_CHECK(expr) {char unnamed[(expr)?1:0];}


濡傛灉鏉′歡涓哄亣錛岀紪璇戝櫒鍥犲ぇ灝忎負(fù)0鐨勬暟緇勯潪娉曡屾姤閿欍備絾鍑洪敊淇℃伅鏄劇劧娌℃湁瀹為檯鎰忎箟錛屽彲浠ユ敼榪涳紝浣跨敤妯℃澘錛?br>
1 template<bool> struct CompileTimeError;
2 template<> strcut CompileTimeError<true>{};
3 #define STATIC_CHECK(expr) (CompileTimeError<(expr)!=0>())


濡傛灉浣犺瘯鐫鍏風(fēng)幇鍖朇ompileTimeError<false>錛岀紪璇戝櫒浼?xì)鎻惤C?#8220;Undefined specialization CompileTimeError<false>”銆?br>錛堣繘涓姝ユ敼榪涗粠鐣ワ級(jí)


cuigang 2007-12-17 22:10 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙浜旓級(jí)http://www.shnenglu.com/cuigang/articles/38818.htmlcuigangcuigangMon, 17 Dec 2007 14:09:00 GMThttp://www.shnenglu.com/cuigang/articles/38818.htmlhttp://www.shnenglu.com/cuigang/comments/38818.htmlhttp://www.shnenglu.com/cuigang/articles/38818.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38818.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38818.html 
1.9 緇撳悎Policy Classes

褰撲綘灝唒olicies緇勫悎璧鋒潵鏃訛紝渚挎槸瀹冧滑鏈鏈夌敤鐨勬椂鍊欍備婦渚嬶紝鑻ユ垜浠暣鎵撶畻璁捐涓涓硾鍨嬬殑smart pointer銆傛垜浠垎鏋愭湁涓や釜policies錛歵hreading model錛堝綰跨▼妯″瀷錛夊拰check before dereference 錛堟彁棰嗗墠鍏堟楠岋級(jí)錛屼簬鏄彲浠ヨ繖鏍峰畾涔塖martPtr妯℃澘綾匯?br>
1 
2 template < Class T,
3            template <class> class CheckingPolicy,
4            template <class> class ThreadingModel
5 >
6 class SmartPtr;


鎴戜滑鍙互榪欐牱浣跨敤錛?br>
1 
2 typedef SmartPtr<Widget, EnforceNoNull, Singlethreaded> SafeWigetPtr;


鎴栬咃紝

1 typedef SmartPtr<Widget, NoChecking, SingleThread> WidgetPTr;


涓鏃︿綘璁炬硶鎶婁竴涓猚lass鍒嗚В鎴愭浜ょ殑policies錛屼究鍙埄鐢ㄥ皯閲忕殑浠g爜娑電洊澶у鏁拌涓恒?br>
1.10 浠olicy Classes 瀹氬埗鎺ュ彛

templates鐨勯檺鍒朵箣涓錛屼綘鏃犳硶瀹氬埗class鐨勭粨鏋勶紝鍙兘瀹氫箟鍏惰涓恒傝宲olicy-based design鏀寔緇撴瀯鏂歸潰鐨勫畾鍒躲?br>
閫氳繃涓涓粨鏋勬寚閽堟垨鑰呭紩鐢ㄧ殑鑱氬悎錛屾垨鑰呬緷闈犱簬緇ф壙銆傞兘鍙互銆?br>
1.11 Policies鐨勫吋瀹規(guī)?br>
鍋囪鏈変袱涓猄martPtr錛欶astWidgetPtr鏄竴涓笉闇瑕佹楠岀殑鎸囬拡錛孲afeWidgetPtr鍒欏繀欏誨湪鎻愰錛坉ereference錛夊墠媯(gè)楠屻備綘鑳藉皢涓涓狥astWidgetPtr瀵硅薄鎸囨淳錛堣祴鍊鹼級(jí)緇欎竴涓猄afeWidgetPtr瀵硅薄鍚楋紵

Policies涔嬮棿鐨勫郊姝よ漿鎹紝鏈濂界殑鏂規(guī)硶鏄互Policy鏉ユ帶鍒禨martPtr瀵硅薄涔嬮棿鐨勬嫹璐濆拰鍒濆鍖栥傚錛?br>
1 template<Class T, template<class> class CheckingPolicy>
2 class SmartPtr : public CheckingPolicy<T>
3 {
4      //
5      template<class T1, template<class> class CP1>
6      SmartPtr(const SmartPtr<T1, CP1>& other>
7           : pointee_(other.pointee_), CheckingPolicy<T>(other)
8      {//}
9 };


鏈妭鍚庣畫鍐呭浠庣暐

1.12 灝嗕竴涓狢lass鍒嗚В涓轟竴鍫哖olicies
1.13 鎽樿
 
 


cuigang 2007-12-17 22:09 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙鍥涳級(jí)http://www.shnenglu.com/cuigang/articles/38814.htmlcuigangcuigangMon, 17 Dec 2007 13:45:00 GMThttp://www.shnenglu.com/cuigang/articles/38814.htmlhttp://www.shnenglu.com/cuigang/comments/38814.htmlhttp://www.shnenglu.com/cuigang/articles/38814.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38814.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38814.html 
1.7 Policy Classes鐨勬瀽鏋勫嚱鏁?br>
鎴戜滑宸茬煡host class浠巔olicy class鍏湁緇ф壙銆傞偅涔堝皢涓涓寚鍚慼ost class瀵硅薄鐨刾olicy class鎸囬拡delete錛屽皢浼?xì)漶旂敓涓嶅彲棰勬湡鐨劸l撴灉銆傝В鍐蟲柟娉曟湁涓夛細(xì)

1銆佸皢policy鐨勬瀽鏋勫嚱鏁板0鏄庝負(fù)铏氬嚱鏁般備絾榪欐牱浼?xì)濡剭policy鐨勯潤鎬佽繛鎺ョ壒鎬э紝涔熶細(xì)褰卞搷鎵ц鏁堢巼銆傜涓涓櫄鍑芥暟鐨勫姞鍏ヤ細(xì)浣垮璞″ぇ灝忓甫鏉ラ澶栧紑閿銆?br>
2銆侀噰鐢╬rotected緇ф壙鎴杙rivate緇ф壙錛堟淳鐢熺被鎸囬拡灝嗕笉鑳借漿鍖栦負(fù)鍩虹被鎸囬拡錛宑uigang錛夈備絾policy鐨勫嚱鏁板垯涓嶈兘瀵瑰璁塊棶錛屽け鍘葷敤鎴鋒墿鍏呯殑鐗規(guī)э紙瑙?.6鑺傦級(jí)銆?br>
3銆佸畾涔変竴涓潪铏氱殑protected鏋愭瀯鍑芥暟銆傦紙涓嶈兘瀵瑰熀綾繪寚閽坉elete錛屽洜涓烘瀽鏋勫嚱鏁頒笉鍙闂紝cuigang錛?br>
鏂規(guī)硶3鏄劇劧娌℃湁1銆?鐨勫壇浣滅敤銆?br>
1.8 閫氳繃涓嶅畬鍏ㄥ叿鐜板寲鑰岃幏寰楃殑閫夋嫨鎬ф満鑳?br>
鏇磋繘涓姝ャ傜敱浜庡浜庢ā鏉跨被涓殑鎴愬憳鍑芥暟錛屽鏋滄湭鏇劇敤鍒幫紝閭d箞瀹冨氨涓嶄細(xì)琚紪璇戝櫒鍏風(fēng)幇鍑烘潵錛屾湁鐨勭紪璇戝櫒鐢氳嚦涓嶅鍏惰繘琛岃娉曟鏌ャ傚姝や究瀵艱嚧host class鏈夋満浼?xì)鎸囨槑迤堜娇鐢╬olicy class鐨勫彲閫夌壒鎬с傚錛?br>
 1 template < template <class> class CreationPolicy >
 2 class WidgetManager : public CreationPolicy<Widget>
 3 {
 4       //
 5       void SwitchPrototype(Widget* pNewPrototype)
 6       {
 7            CreationPolicy<Widget>& myPolicy = *this;
 8            delete myPolicy.GetPrototype();
 9            myPolicy.SetPrototype(pNewPrototype);
10       }
11 }


閭d箞

1銆佸鏋滀綘閲囩敤鐨凜reationPolicy鏀寔GetPrototype()錛岄偅涔堜嬌鐢╓idgetManager::SwitchPrototype()娌¢棶棰樸?br>
2銆佸鏋滀綘閲囩敤鐨凜reationPolicy涓嶆敮鎸丟etPrototype()錛岄偅涔堜嬌鐢╓idgetManager::SwitchPrototype()緙栬瘧鍑洪敊銆?br>
3銆佸鏋滀綘閲囩敤鐨凜reationPolicy涓嶆敮鎸丟etPrototype()錛屼絾鏄病鏈変嬌鐢╓idgetManager::SwitchPrototype()錛岄偅涔堟病闂錛侊紒錛?br>
閭d箞host class鐨勪綔鑰呭氨鍙互鍒╃敤榪欑涓嶅畬鏁村叿鐜板寲錛坕ncomplement instantiation錛夛紝棰勫畾涔変竴浜涘彲閫夌殑鏂規(guī)硶銆?br> 


cuigang 2007-12-17 21:45 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙涓夛級(jí)http://www.shnenglu.com/cuigang/articles/38813.htmlcuigangcuigangMon, 17 Dec 2007 13:44:00 GMThttp://www.shnenglu.com/cuigang/articles/38813.htmlhttp://www.shnenglu.com/cuigang/comments/38813.htmlhttp://www.shnenglu.com/cuigang/articles/38813.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38813.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38813.html 
1.5.1 榪愮敤Template Template鍙傛暟瀹炰綔Policy Classes

濡傚墠渚嬶紝搴撲唬鐮乭ost class濡傛灉宸茬煡policy class錛岄偅涔堝彲浠ヨ繖鏍鋒弿榪幫細(xì)
1 
2 //Library code
3 template < template < class Created > class CreationPolicy >
4 class WidgetManager : public CreationPolicy<Widget>{};


鍥犱負(fù)Created鍙槸褰㈠紡寮曟暟錛坒ormal argument錛夛紝涓嶅彲浣跨敤錛屽彲浠ョ渷鐣ュ涓嬶細(xì)
1 
2 template < template < class > class CreationPolicy >
3 class WidgetManager : public CreateionPolicy<Widget>{};


瀹㈡埛浠g爜涓猴細(xì)

1 typedef WidgetManager<OpNewCreator> MyWidgetMgr;


褰揥idgetManager甯屾湜鍦ㄥ唴閮ㄤ互鐩稿悓鐨勭敓鎴愮瓥鐣ヤ駭鐢熶竴涓唴閮ㄥ璞★紝閭d箞榪欑template template褰㈠紡涓嶅彲鎴栫己銆?br>
Policy鐨勭‘鑳藉甯︾粰WidgetManager闈炲父澶х殑寮規(guī)с傜涓錛屽彲浠ュ閮ㄥ彉鏇磒olicies銆傜浜岋紝鍙互鑷畾涔塸olicies銆?br>
WidgetManager鐨勪綔鑰呭彲浠ュ畾涔変竴浜涘父鐢ㄧ殑policies錛屼互“template 緙虹渷寮曟暟”鐨勬柟寮忔彁渚涳細(xì)
1 
2 template < template < class > class CreationPolicy = OpNewCreator >
3 class WidgetManager .


1.5.2 榪愮敤Template 鎴愬憳鍑芥暟瀹炰綔Policy Classes

鎴戜滑鍙互鎶婂厛鍓嶇殑Creator policy瀹氫箟涓轟竴涓潪妯℃澘綾伙紝鍐呴儴鎻愪緵涓涓ā鏉挎垚鍛樺嚱鏁板涓嬶細(xì)
 1 
 2 struct OpNewCreator
 3 {
 4      template < class T >
 5      static T* Create()
 6      {
 7             return new T;
 8      }
 9 }
10 

榪欑鏂瑰紡瀵規(guī)棫寮忕紪璇戞湡鏈夎緝浣?jīng)_吋瀹規(guī)с備絾闅句互璁ㄨ銆佸畾涔夈佸疄浣滃拰榪愮敤銆?br>
1.6 鏇翠赴瀵岀殑Policies

鍦ㄥ墠渚嬬殑Creator policy涓璓rototypeCreateor闄や簡鎻愪緵Create()鎴愬憳鍑芥暟澶栵紝榪樻彁渚涗簡GetProtoType鍜孲etProtoType涓や釜鍑芥暟錛岀敱浜嶹idgetManager緇ф壙浜唒olicy class錛屾墍浠idgetManager鍏鋒湁姝や袱涓帴鍙o紝铏界劧瀹冭嚜宸卞茍娌℃湁鐢ㄣ?br>
瀹㈡埛浠g爜鍙互濡傛錛?br>
1 
2 typedef WidgetManager<PrototypeCreator> MyWidgetManager;
3 /////////
4 widget* pPrototype = ;
5 MyWidgetManager mgr;
6 mgr.SetPrototype(pPrototype);


浣跨敤鑰呭鏋滈渶瑕佹墿鍏卲olicies錛屽彲浠ュ湪涓嶅獎(jiǎng)鍝峢ost class鍘熸湰鍔熻兘鐨勫墠鎻愪笅錛屽鍔犳帴鍙c?#8220;鍝釜policy琚嬌鐢?#8221;鐢變嬌鐢ㄨ呭喅瀹氳岄潪紼嬪簭搴撹嚜韜俻olicies緇欎笌浣跨敤鑰呬竴縐嶈兘鍔涳紝鍦ㄥ瀷鍒畨鍏ㄧ殑鍓嶆彁涓嬫墿澧瀐ost class鐨勫姛鑳姐?br>
 


cuigang 2007-12-17 21:44 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙浜岋級(jí)http://www.shnenglu.com/cuigang/articles/38811.htmlcuigangcuigangMon, 17 Dec 2007 13:41:00 GMThttp://www.shnenglu.com/cuigang/articles/38811.htmlhttp://www.shnenglu.com/cuigang/comments/38811.htmlhttp://www.shnenglu.com/cuigang/articles/38811.html#Feedback0http://www.shnenglu.com/cuigang/comments/commentRss/38811.htmlhttp://www.shnenglu.com/cuigang/services/trackbacks/38811.html 
1.5 Policies鍜孭olicy Classes

涓句緥錛屽畾涔変竴涓猵olicy鐢熸垚瀵硅薄錛欳reator policy 鎻愪緵涓涓狢reate鍑芥暟錛岃繑鍥炰竴涓寚鍚戞柊鐢烼綾誨瀷瀵硅薄鐨勬寚閽堛?br>
鎴戜滑鏈変笁縐嶅仛娉曪細(xì)

 1 template<class T>
 2 struct OpNewCreator{
 3      static T* Create(){
 4           return New T;
 5      }
 6 };
 7 template <class T>
 8 struct MallocCreator{
 9      static T* Create(){
10            void* buf = std::malloc(sizeof(T));
11            if(!buf) return 0;
12            return new(buf) T;     //瀹氫綅new琛ㄨ揪寮忥紝瑙併奀++ primer銆?.4.5錛?nbsp;cuigang
13       }
14 };
15 template <class T>
16 struct PrototypeCreator{
17       PrototypeCreator(T* pObj =0):pPrototype_(pObj){}
18       T* Create(){
19             return pPrototype_? pPrototype_->Clone():0;
20       }
21       T* GetPrototype(){ return pPrototype_;}
22       void SetPrototype(T* pObj){pPrototype_ = pObj;}
23 private:
24       T* pPrototype_;
25 };
26 

榪欎簺瀹炰綔鍑烘潵鐨刾olicy縐頒負(fù)policy classes錛岃繖涓笢瑗垮茍涓嶆剰鍥捐鍗曠嫭浣跨敤錛屽畠浠富瑕佺敤浜庣戶鎵挎垨琚唴鍚簬鍏跺畠classes銆?br>
涓涓被浠ュ鍚堟垨緇ф壙鐨勬柟寮忎嬌鐢ㄥ厛鍓嶅畾涔夌殑涓変釜classes涔嬩竴錛屼緥濡?br>
1 //Library code
2 template <class CreationPolicy>
3 class WidgetManager : public CreationPolicy{};


濡傛灉class閲囩敤涓涓垨澶氫釜policies錛屾垜浠О涓篽osts鎴杊ost classes銆?br>
瀹㈡埛绔姝ゅ疄渚嬪寲錛?br>
1 //Application code
2 typedef WidgetManager< OpNewCreator<widget> > MywidgetMgr;


璁╂垜浠垎鏋愭暣涓潵榫欏幓鑴夈傛棤璁轟綍鏃訛紝褰撲竴涓狹ywidgetMgr瀵硅薄闇瑕佷駭鐢熶竴涓獁idget瀵硅薄鏃訛紝瀹冧究璋冪敤瀹冪殑policy瀛愬璞pNewCreator<widget>鎵鎻愪緵鐨凜reatev()銆傞夋嫨“鐢熸垚絳栫暐”錛圕reation policy錛夋槸WidgetManager浣跨敤鑰呯殑鏉冨埄銆傝棄鐢辮繖鏍風(fēng)殑璁捐錛屽彲浠ヨWidgetManager浣跨敤鑰呰嚜琛岃閰嶄粬鎵闇瑕佺殑鏈鴻兘銆?br>
榪欎究鏄疨olicy-based class鐨勮璁′富鏃ㄣ?br> 
==============================
1 template <class T>
2 void* buf = std::malloc(sizeof(T));
3 void* buf =  (void*)new T;

褰揟涓哄熀綾伙紝鍏鋒湁媧劇敓綾繪椂錛屼袱鑰呯敵璇風(fēng)殑鍐呭瓨澶у皬鏄笉涓鑷寸殑錛宻izeof(T)涓嶅寘鎷?virtual table 鐨勫ぇ灝忋?br>鈥斺旈挓閬?br> 
//////////////////////////////
閽熼仴榪囪檻浜嗭紝浠ヤ笅浠g爜
 1 struct base{
 2         int x;
 3         base(){
 4                 std::cout<< "create a base."<<std::endl;
 5         }
 6         virtual void foo(){
 7                 std::cout<<"call base"<<std::endl;
 8         };
 9 };
10 struct test : public base{
11         int y;
12         test(){
13                 std::cout<< "create a test."<<std::endl;
14         }
15         virtual void foo(){
16                 std::cout<<"call test."<<std::endl;
17         }
18         void foo2(){};
19 };
20 /////////////////////////
21         int a = sizeof(test);
22         int b = sizeof(base);
23         std::cout<<"sizeof(test)="<< a << ""<<"sizeof(base)=" << b << endl;
24         base* pa = new base;
25         base* pb = new test;
26         std::cout<<"---------"<<endl;
27         base* ppa = (base*)malloc(sizeof(base));
28         base* ppb = (base*)malloc(sizeof(test));
29         std::cout<<"---------"<<endl;
30         new(ppa) base;
31         new(ppb) test;
32         pa->foo();
33         pb->foo();
34         ppa->foo();
35         ppb->foo();


杈撳嚭緇撴灉錛?br>
 1 sizeof(test)=12, sizeof(base)=8
 2 create a base.
 3 create a base.
 4 create a test.
 5 ---------
 6 ---------
 7 create a base.
 8 create a base.
 9 create a test.
10 call base
11 call test.
12 call base
13 call test.

 
 


cuigang 2007-12-17 21:41 鍙戣〃璇勮
]]>
銆奀++璁捐鏂版濈淮銆嬭涔︾瑪璁幫紙涓錛?/title><link>http://www.shnenglu.com/cuigang/articles/38469.html</link><dc:creator>cuigang</dc:creator><author>cuigang</author><pubDate>Thu, 13 Dec 2007 16:16:00 GMT</pubDate><guid>http://www.shnenglu.com/cuigang/articles/38469.html</guid><wfw:comment>http://www.shnenglu.com/cuigang/comments/38469.html</wfw:comment><comments>http://www.shnenglu.com/cuigang/articles/38469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cuigang/comments/commentRss/38469.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cuigang/services/trackbacks/38469.html</trackback:ping><description><![CDATA[<p><br>絎竴綃?鎶鏈?/p> <p>1 鍩轟簬Policy鐨凜lass璁捐</p> <p>1.1 杞歡璁捐鐨勫鏍鋒?/p> <p>涓撲笟杞歡璁捐甯堜笌鏂版墜鐨勬渶澶т笉鍚屽湪浜庯紝鍓嶈呯煡閬撲粈涔堝彲浠ユ湁鏁堣繍浣滐紝浠涔堜笉鍙互銆備換浣曡璁$粨鏋勪笂鐨勯棶棰橈紝閮芥湁璁稿鍚堥傜殑瑙f硶錛岀劧鑰屽畠浠悇鏈変笉鍚岃鏍煎茍涓斿悇鏈変紭緙虹偣錛屽鐪煎墠鐨勯棶棰樺彲鑳藉悎閫備篃鍙兘涓嶅悎閫傘傜櫧鏉夸笂鍙帴鍙楃殑鏂規(guī)錛屼笉涓瀹氱湡鏈夊疄鐢ㄤ環(huán)鍊箋?/p> <p>璁捐涓涓蔣浠剁郴緇熷緢鍥伴毦錛屽洜涓哄畠涓嶆柇瑕佹眰浣犲仛鎶夋嫨銆傝岀▼搴忚璁$姽濡備漢鐢燂紝鎶夋嫨鏄洶闅劇殑銆?/p> <p>1.2 鍏ㄥ姛鑳藉瀷鎺ュ彛鐨勫け璐?/p> <p>搴炲ぇ鐨刢lasses涓嶈兘瑙嗕負(fù)鎴愬姛錛屽洜涓哄畠浠細(xì)瀵艱嚧娌夐噸鐨勫涔?fàn)璐熻嶘P紝騫朵笖鏈?#8220;闈炲繀瑕佷箣澶ц妯?#8221;鍊懼悜錛屼嬌寰椾唬鐮佽繙姣旀墜宸ュ埗浣滆繕鎱€?/p> <p>鐞嗘兂涓婏紝涓涓壇濂界殑璁捐搴旇鍦ㄧ紪璇戞湡寮哄埗琛ㄧ幇鍑哄ぇ閮ㄥ垎constraints錛堢害鏉熸潯浠躲佽鑼冿級(jí)銆?/p> <p>1.3 澶氶噸緇ф壙鏄晳涓栦富錛?/p> <p>钘夌敱澶氶噸緇ф壙鏉ョ粍鍚堝欏瑰姛鑳斤紝浼?xì)漶旂敓濡備笅闂锛?xì)</p> <p>a.鍏充簬鎶鏈紙mechanics錛夈傜洰鍓嶅茍娌℃湁涓鎴愪笉鍙樺嵆鍙鐢ㄧ殑浠g爜錛屽彲浠ュ湪鏌愮鍙楁帶鎯呭喌涓嬪皢緇ф壙鑰屾潵鐨刢lasses緇勫悎錛坅ssemble錛夎搗鏉ャ傚ぇ澶氭暟鏃跺欎綘寰楀皬蹇冨崗璋冪戶鎵胯屾潵鐨刢lasses鐨勮繍杞紝璁╁畠浠緱鍒版墍闇鐨勮涓恒?/p> <p>b.鍏充簬鍨嬪埆淇℃伅錛圱ype information錛夈侭ase classes騫舵病鏈夎凍澶熺殑鍨嬪埆淇℃伅鏉ョ戶緇畬鎴愬畠浠殑宸ヤ綔銆?/p> <p>c.鍏充簬鐘舵佸鐞嗭紙state manipulation錛夈俠ase classes瀹炰綔涔嬪悇縐嶈涓哄繀欏繪搷浣滅浉鍚岀殑state錛堟暟鎹級(jí)銆傝繖鎰忓懗鐫瀹冧滑蹇呴』铏氱戶鎵夸竴涓寔鏈夎state鐨刡ase class銆傜敱浜庢繪槸鐢眜ser classes緇ф壙library classes錛堣岄潪鍙嶅悜錛夛紝榪欎細(xì)浣胯璁℃洿鍔犲鏉傝屼笖鍙樺緱娌℃湁寮規(guī)с?/p> <p>1.4 Templates甯︽潵鏇欏厜</p> <p>templates鏄竴縐嶅緢閫傚悎“緇勫悎鍚勭琛屼負(fù)”鐨勬満鍒訛紝涓昏鍥犱負(fù)瀹冧滑鏄?#8220;渚濊禆浣跨敤鑰呮彁渚涚殑鍨嬪埆淇℃伅”騫朵笖“鍦ㄧ紪璇戞湡鎵嶄駭鐢?#8221;鐨勪唬鐮併?/p> <p>鍜屼竴鑸殑class涓嶅悓錛宑lass templates鍙互浠ヤ笉鍚岀殑鏂瑰紡瀹氬埗銆傦紙涓句緥鐗瑰寲錛?/p> <p>鐘規(guī)湁榪涜咃紝瀵逛簬甯︽湁澶氫釜鍙傛暟鐨刢lass templates錛屼綘鍙互閲囩敤partial template specialization錛堝亸鐗瑰寲錛夈傦紙涓句緥錛?/p> <p>template鐨勭紪璇戞湡鐗規(guī)т互鍙?#8220;鍙簰鐩哥粍鍚?#8221;鐗規(guī)э紝浣垮畠鍦ㄨ璁℃湡闈炲父寮曚漢娉ㄧ洰銆傜劧鑰屼竴鏃︿綘寮濮嬪皾璇曞疄浣滆繖浜涜璁★紝浣犱細(xì)閬亣涓浜涗笉鏄偅涔堟祬鐧界殑闂錛?/p> <p>a.浣犳棤娉曠壒鍖栫粨鏋勶紝浣犲彧鑳界壒鍖栧叾鎴愬憳鍑芥暟銆?/p> <p>b.鎴愬憳鍑芥暟鐨勭壒鍖栧茍涓嶈兘“渚濈悊鎵╁紶”銆傦紙榪欓噷鎸囨垚鍛樺嚱鏁頒笉鍏鋒湁鍋忕壒鍖栬涓猴紝cuigang錛?/p> <p>c.紼嬪簭搴撴挵鍐欒呬笉鑳藉鎻愪緵澶氱瑪緙虹渷鍊箋?/p> <p>澶氶噸緇ф壙鍜宼emplates涓よ呬簰琛ワ紝濡傛灉鎴戜滑灝唗emplates鍜屽閲嶇戶鎵跨粍鍚堣搗鏉ワ紝灝嗕細(xì)浜х敓闈炲父鍏峰脊鎬х殑璁懼錛坉evice錛夛紝搴旇寰堥傚悎鐢ㄦ潵浜х敓紼嬪簭搴撲腑鐨?#8220;璁捐鍏冪礌”錛坉esign elements錛夈?/p><img src ="http://www.shnenglu.com/cuigang/aggbug/38469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cuigang/" target="_blank">cuigang</a> 2007-12-14 00:16 <a href="http://www.shnenglu.com/cuigang/articles/38469.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.bttzc.cn" target="_blank">久久精品99无色码中文字幕</a>| <a href="http://www.hfoa.com.cn" target="_blank">久久久国产精品福利免费</a>| <a href="http://www.air-walk.com.cn" target="_blank">成人精品一区二区久久久</a>| <a href="http://www.gx177.cn" target="_blank">国产亚洲精久久久久久无码</a>| <a href="http://www.rz2.com.cn" target="_blank">区久久AAA片69亚洲 </a>| <a href="http://www.wggls.cn" target="_blank">国产精品国色综合久久</a>| <a href="http://www.hit5.cn" target="_blank">精品国产乱码久久久久久呢</a>| <a href="http://www.bao00long.cn" target="_blank">亚洲国产精品狼友中文久久久</a>| <a href="http://www.zhihuzhuanlan.com.cn" target="_blank">亚洲精品高清国产一久久</a>| <a href="http://www.123yo.cn" target="_blank">久久青草国产手机看片福利盒子 </a>| <a href="http://www.njkyt.cn" target="_blank">久久99精品久久久久久水蜜桃 </a>| <a href="http://www.zzdls.cn" target="_blank">91麻豆国产精品91久久久</a>| <a href="http://www.i231.cn" target="_blank">亚洲国产小视频精品久久久三级 </a>| <a href="http://www.sspfn.cn" target="_blank">久久精品亚洲乱码伦伦中文</a>| <a href="http://www.51hitjj.cn" target="_blank">97超级碰碰碰碰久久久久</a>| <a href="http://www.djmb.net.cn" target="_blank">久久精品国产亚洲综合色</a>| <a href="http://www.xt87.cn" target="_blank">国产精品久久波多野结衣</a>| <a href="http://www.rct7.cn" target="_blank">国产精品久久久久久</a>| <a href="http://www.fuhuazhan.cn" target="_blank">久久91精品国产91久久户</a>| <a href="http://www.binzhun.cn" target="_blank">久久亚洲国产精品一区二区</a>| <a href="http://www.85062.com.cn" target="_blank">91精品国产高清久久久久久91</a>| <a href="http://www.gkcv.cn" target="_blank">青青青青久久精品国产h</a>| <a href="http://www.santoncc.cn" target="_blank">www亚洲欲色成人久久精品</a>| <a href="http://www.dx37.cn" target="_blank">久久精品国产欧美日韩</a>| <a href="http://www.gaokaocaiti.cn" target="_blank">久久综合久久鬼色</a>| <a href="http://www.qhklmy.cn" target="_blank">色播久久人人爽人人爽人人片AV</a>| <a href="http://www.3gdd.cn" target="_blank">久久婷婷色综合一区二区</a>| <a href="http://www.fayongshicai.cn" target="_blank">久久久久亚洲av成人网人人软件 </a>| <a href="http://www.iqwn.cn" target="_blank">亚洲精品无码久久久久去q</a>| <a href="http://www.pkx9.cn" target="_blank">婷婷久久香蕉五月综合加勒比</a>| <a href="http://www.kimhi.cn" target="_blank">久久天天躁狠狠躁夜夜网站 </a>| <a href="http://www.jsjdzz.cn" target="_blank">777米奇久久最新地址</a>| <a href="http://www.pxep.cn" target="_blank">93精91精品国产综合久久香蕉</a>| <a href="http://www.hzskc.cn" target="_blank">久久国产精品偷99</a>| <a href="http://www.662z.cn" target="_blank">国产精品成人久久久</a>| <a href="http://www.dlucai.cn" target="_blank">青草国产精品久久久久久</a>| <a href="http://www.ehxs.cn" target="_blank">青青热久久综合网伊人</a>| <a href="http://www.zhaiseng.cn" target="_blank">久久亚洲中文字幕精品一区四</a>| <a href="http://www.ya74.cn" target="_blank">久久精品国产日本波多野结衣</a>| <a href="http://www.567uu.cn" target="_blank">久久久久亚洲AV无码永不</a>| <a href="http://www.b3804.cn" target="_blank">91精品久久久久久无码</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>