锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产手机视频一区二区,亚洲第一天堂av,性色一区二区三区http://m.shnenglu.com/agerlis/alexzh-cnSun, 16 Nov 2025 14:36:34 GMTSun, 16 Nov 2025 14:36:34 GMT60緙栧啓寮傚父瀹夊叏鐨勪唬鐮?loki::scopeguard)http://m.shnenglu.com/agerlis/archive/2007/02/11/18649.htmlagerlisagerlisSun, 11 Feb 2007 07:55:00 GMThttp://m.shnenglu.com/agerlis/archive/2007/02/11/18649.htmlhttp://m.shnenglu.com/agerlis/comments/18649.htmlhttp://m.shnenglu.com/agerlis/archive/2007/02/11/18649.html#Feedback3http://m.shnenglu.com/agerlis/comments/commentRss/18649.htmlhttp://m.shnenglu.com/agerlis/services/trackbacks/18649.html浠婂ぉ鏉ヨ璁叉庝箞緙栧啓寮傚父瀹夊叏鐨勪唬鐮併?br />紼嬪簭榪愯榪囩▼涓紝寰寰闇瑕佸涓浜涙祦紼嬪姞鍏ュ紓甯稿鐞嗭紝鏉ユ彁楂樼▼搴忕殑robust.姣斿
閫氳繃try catch鏉ユ崟鎹夊紓甯?br />try
{
聽聽聽 pMemory = new char[MAX_BUF_SIZE];
}
catch(std::bad_alloc& e)
{
聽聽聽 //error handling,er:do something resource free
}
浣嗗湪紼嬪簭浠g爜孌典腑鍑虹幇澶ч噺鐨則ry catch,涓嶄粎浠庣編瑙傦紝鏁堢巼鍜岀▼搴忚緭鍐欎笂閮芥槸涓嶆庝箞濂姐?br />鑰屽彟澶栦竴縐嶅浜庡紓甯哥殑澶勭悊鏂規硶鏄緷璧栦簬c++鐨刢tor/dctor鐨勫尮閰嶆潵鍋氱殑錛屽氨鏄墍璋撶殑
RAII,榪欎釜寰堝鏄撹浜鴻仈鎯沖埌std::auto_ptr
std::auto_ptr<int> tmp(new int);
閫氳繃new鍒嗛厤鐨勫璞′細鍦╰mp鐢熷懡緇撴潫鍚庯紝閲婃斁鐩稿叧鐨勮祫婧愶紝閫氳繃榪欑鏂瑰紡錛屽氨鑳戒繚璇佸湪紼嬪簭寮傚父錛屾垨閫鍑烘椂錛屽凡鍒嗛厤鐨勫璞¤兘姝g‘鑷姩鐨勯噴鏀炬嫢鏈夌殑璧勬簮錛岃屽湪瀵硅薄澹版槑鍛ㄦ湡鍐咃紝鍙互淇濊瘉璧勬簮鐨勬湁鏁堟с?br />榪欑鏂瑰紡灝辨槸浠婂ぉblog瑕佸啓鐨勪富瑕佸唴瀹癸紝鎴戜滑鍙互鐪嬪埌std::auto_ptr浣滅敤鑼冨洿寰堝皬錛屽彧鑳藉浠庡爢涓婂垎閰嶇殑瀵硅薄榪涜綆$悊錛屽亣濡傚鏂囦歡鎵撳紑鍙ユ焺瀹炶RAII,浣犱篃璁鎬細璁や負鍐嶅啓涓笉灝辨槸浜嗭紝浣嗚繖鏍峰彧浼氶犳垚婧愪唬鐮侀噷鍏呮弧浜嗚繖浜涜祫婧愮鐞嗙殑綾伙紝榪欏鑷翠簡涓涓弗閲嶇殑闂錛屽ソ鐨勭粨鏋勫湪綣佺悙鐨勬祦鐣呭墠闈㈠彉鐨勯毦鍫?br />閭f庝箞鏍峰榪欎釜榪涜娉涘寲錛屼粠鑰岃兘瀵規瘮濡備粠綆鍗曠殑鎸囬拡閲婃斁錛屾枃浠跺彞鏌勭淮鎶わ紝鐢氳嚦鐩稿叧鐨勬垚鍛樺嚱鏁般傛垜浠潵鐪嬩笅loki::socpeguard鏄庝箞瀹炵幇鐨勶細
鍏堢湅涓嬪熀鏈殑鐢ㄦ硶
(1)聽 FILE* hFileOpen = fopen(....);
(2)聽 LOKI_ON_BLOCK_EXIT(flose,hFileOpen);
line2浼氬湪鍑篖OKI_ON_BLOCK_EXIT鍩熸垨紼嬪簭寮傚父緇撴潫鏃惰璋冪敤錛屼笅闈㈡槸瀵圭被鎴愬憳鐨勮皟鐢?br />void CTestObject::Create
{
聽聽聽 LOKI_ON_BLOCK_EXIT_OBJ(*this,FressResouce);
聽聽聽 ...
}
鍚屼笂闈㈠樊涓嶅錛屼細鍦ㄨ繖涓嚱鏁扮粨鏉熷悗鎴栧紓甯哥粨鏉熷悗璋冪敤綾繪垚鍛樼殑FreeResource.鍦ㄦ甯告祦紼嬬粨鏉熷悗錛屽彲浠ラ氳繃璋冪敤Dismiss鏉ラ槻姝㈠FreeResouce鐨勮皟鐢紝鍗崇被浼兼暟鎹簱鎿嶄綔鐨刢ommit鎿嶄綔銆備笅闈㈡潵鍒嗘瀽涓婰OKI鐨勫疄鐜幫細
浠庝笂闈㈠彲浠ョ湅鍒幫紝RAII鐨勬槸錛?br />1錛氭瀯閫犲嚱鏁板璧勬簮鐨勮幏鍙?br />2錛氱█鏋勫嚱鏁板璧勬簮鐨勯噴鏀?br />鍏堟潵鐪嬩笅LoKi瀵逛笂闈㈤偅2涓畯鐨勫畾涔?br />#define LOKI_ON_BLOCK_EXIT聽聽聽聽聽 Loki::ScopeGuard LOKI_ANONYMOUS_VARIABLE(scopeGuard) = Loki::MakeGuard

#define LOKI_ON_BLOCK_EXIT_OBJ聽 Loki::ScopeGuard LOKI_ANONYMOUS_VARIABLE(scopeGuard) = Loki::MakeObjGuard
涓婇潰鐨凩oki::ScopeGuard鏄竴涓熀綾葷殑鍒悕
typedef const ScopeGuardImplBase& ScopeGuard;
鑰孡OKI_ANONYMOUS_VARIABLE(scopeGuard)鐢ㄦ潵鎴戜滑浜х敓鍞竴鐨勫悕瀛楋紝鏈夋椂鍋囧闇瑕佽皟鐢―ismiss鐨勮瘽錛屽垯闇瑕佽嚜宸卞幓瀹炵幇瀹忓畾涔夌殑鍐呭錛岃繖鏍鋒墠鑳介氳繃瀵硅薄璁塊棶銆侺oki::MakeGuard鎴朙oki::MakeObjGuard鏄敤鏉ヤ駭鐢熷璞$殑瀹為檯綾誨瀷鐨勶紝涓嬮潰鏄竴涓?br />Loki::MakeGuard鐨勪緥瀛愶細
template <typename F, typename P1>
inline ScopeGuardImpl1<F, P1> MakeGuard(F fun, P1 p1)
{
聽聽聽 return ScopeGuardImpl1<F, P1>::MakeGuard(fun, p1);
}
鍙互鐪嬪埌ScopeGuardImpl1<F, P1>鏄浜х敓鐨勫叿浣撶被鍨嬶紝MakeGuard閫氳繃鍑芥暟鍙傛暟鐨勬暟鐩潵閲嶈澆鐨勶紝鑰孧akeGuard姝ゅ鐨勪綔鐢ㄦ槸瑕佺潯姝諱簡...-_-'',浣滅敤鏄埄鐢ㄥ嚱鏁拌嚜鍔ㄦ帹瀵煎嚭鍙傛暟鐨勭被鍨嬶紝榪欐牱灝卞厤鍘諱簡鎸囧畾ScopeGuardImpl1鐨勭被鍨嬬殑楹葷儲錛岃?br />ScopeGuardImpl1<F, P1>::MakeGuard(fun, p1);
綆鍗曠殑榪斿洖瀵硅薄鐨勪竴涓復鏃跺彉閲忥紝騫禷ssign緇欎竴涓笂闈㈢殑涓涓猻copeguard鐨勫疄渚嬶紝榪欓噷渚濊禆涓涓狢++鐨勭壒鎬э紝涓存椂鍙橀噺鐨勫0鍛藉懆鏈熷拰閫氳繃浠栧垵濮嬪寲鐨勫紩鐢ㄧ被鍨嬬殑澹版槑鍛ㄦ湡鏄竴鑷寸殑銆?/p>

浠庝笂闈㈠彲浠ョ湅鍒癓oki瀹氫箟浜嗕竴涓猄copeGuardImplBase鐨勫熀紜綾匯傝繖涓被瀹氫箟浜嗕竴涓熀鏈殑鏂規硶Dismiss,浠ュ強鐩稿叧鐨勭姸鎬併備笅闈㈡槸loki涓繖涓被鐨勫畾涔?br />class ScopeGuardImplBase
{
聽聽聽 ScopeGuardImplBase& operator =(const ScopeGuardImplBase&);
聽protected:
聽聽聽 ~ScopeGuardImplBase()
聽聽聽 {}
聽聽聽 ScopeGuardImplBase(const ScopeGuardImplBase& other) throw()
聽聽聽聽聽聽聽 : dismissed_(other.dismissed_)
聽聽聽 {
聽聽聽聽聽聽聽 other.Dismiss();
聽聽聽 }
聽聽聽 template <typename J>
聽聽聽 static void SafeExecute(J& j) throw()
聽聽聽 {
聽聽聽聽聽聽聽 if (!j.dismissed_)
聽聽聽聽聽聽聽聽聽聽 try
聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽 j.Execute();
聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽 catch(...)
聽聽聽聽聽聽聽聽聽聽 {}
聽聽聽聽 }
聽聽聽聽聽聽聽
聽聽聽聽 mutable bool dismissed_;
public:
聽聽聽聽 ScopeGuardImplBase() throw() : dismissed_(false)
聽聽聽聽 {}
聽聽聽聽 void Dismiss() const throw()
聽聽聽聽 {
聽聽聽聽聽聽聽聽 dismissed_ = true;
聽聽聽聽聽 }
};
鍙互鐪嬪埌綾婚噷闈㈠畾涔変簡涓婇潰鎵璇寸殑涓浜涘睘鎬э紝鍏朵腑SafeExecute鐢ㄦ潵鎻愪緵瀛愮被鍚屼竴鐨勮祫婧愰噴鏀炬柟娉曪紝騫惰皟鐢ㄥ瓙綾葷殑鏂規硶鏉ュ叿浣撴搷浣滐紝鍥犱負鐩稿叧鐨勫嚱鏁幫紝鍙橀噺閮戒繚瀛樺湪鍏蜂綋鐨勫瓙綾伙紝鍙互鐪嬪埌榪欎釜鍑芥暟浣跨敤浜唗ry catch錛岃繖閲屽姞榪欎釜鐨勭洰鐨勬槸錛屽洜涓鴻祫婧愰噴鏀捐鍦ㄥ瓙綾葷殑紼鏋勯噷琚Е鍙戯紝鑰岃皟鐢ㄥ叿浣撶殑鏂規硶鏄闈紶榪涙潵鐨勶紝鎵浠ユ棤娉曚繚璇佷竴瀹氭槸寮傚父瀹夊叏鐨勶紝鑰屽亣濡傚湪紼鏋勯噷闈㈠紓甯哥殑璇濓紝浼氬鑷寸▼搴忕殑琛屼負鏃犳硶瀹氫箟銆?br />涓嬮潰鍏蜂綋鏉ョ湅涓嬩竴涓瓙綾葷殑瀹炵幇錛?br />template <typename F, typename P1>
class ScopeGuardImpl1 : public ScopeGuardImplBase
{
public:
聽聽聽 static ScopeGuardImpl1<F, P1> MakeGuard(F fun, P1 p1)
聽聽聽 {
聽聽聽聽聽聽聽 return ScopeGuardImpl1<F, P1>(fun, p1);
聽聽聽 }
聽聽聽 ~ScopeGuardImpl1() throw()
聽聽聽 {
聽聽聽聽聽聽聽 SafeExecute(*this);
聽聽聽 }
聽聽聽 void Execute()
聽聽聽 {
聽聽聽聽聽聽聽 fun_(p1_);
聽聽聽 }
protected:
聽聽聽 ScopeGuardImpl1(F fun, P1 p1) : fun_(fun), p1_(p1)
聽聽聽 {}
聽聽聽 F fun_;
聽聽聽 const P1 p1_;
};
鍦↙oKi閲岄潰鍙互鐪嬪埌寰堝綾諱技ScopeGuardImpl1鐨勫畾涔夛紝姣斿ScopeGuardImpl0錛?br />ScopeGuardImpl2錛屽彲浠ュ彂鐜版渶鍚庨潰鐨勬暟瀛楄〃紺哄叿浣撳弬鏁扮殑鏁扮洰銆?br />鍙互鐪嬪埌涓婇潰鎵璇寸殑MakeGuard鐨勫畾涔夛紝浠ュ強瀵瑰熀綾繪柟娉曠殑璋冪敤錛屽彲浠ョ湅鍒版瀯閫犲嚱鏁版帴鏀剁殑綾誨瀷錛屼竴涓嚱鏁板璞★紝鍜屼竴浜涘弬鏁板璞★紝騫朵繚瀛橈紝瀵逛簬鎴愬憳鍑芥暟鐨剆copeguard,LoKi瀹氫箟浜?浜涚浉浼肩殑綾伙紝涓昏鏄鍔犱簡瀵硅薄鐨勫紩鐢紝榪樻湁灝辨槸鍑芥暟鐨勮皟鐢ㄦ柟寮忎笂銆?br />涓婇潰鍙互鐪嬪埌鍙傛暟鏄氳繃鍊肩殑鏂瑰紡鏉ヤ繚瀛樼殑鑰屼笉鏄氳繃寮曠敤銆傝屼笖鏄痗onst灞炴х殑錛屼笅闈㈡槸鐩稿叧鐨勫垎鏋愩?br />1錛氶氳繃浼犲肩殑鏂瑰紡錛屼粠鑰岄伩鍏嶄簡寮傚父鎶涘嚭鏃訛紝鍙兘寮曠敤鐨勫璞¤紼鏋?br />2錛氬姞const灞炴э紝浠庤屼繚璇佷簡鍦╢unc闇瑕佸弬鏁版槸reference鏃惰屼繚瀛樼殑鍙傛暟紜槸闈瀋onst鏃朵駭鐢熺浉搴旂殑緙栬瘧閿欒錛屽洜涓哄reference浼犱漢const non-reference褰㈠紡鏄敊璇殑銆?br />鑰屽浜?鐨勬柟寮忥紝瀛樺湪鐨勪竴縐嶉棶棰樻槸鍋囧鎿嶄綔鐨刦un闇瑕佷紶鍏ュ紩鐢紝閭d紶榪涘幓鐨勫煎氨鏃犳硶鍦ㄩ噴鏀劇殑鍑芥暟涓鏀瑰彉錛岃?鏄榪欑鐨勪竴縐嶇被浼煎綰︿技鐨勭紪紼嬶紝Loki 鎻愪緵鐨勬柟娉曟槸閫氳繃涓涓腑闂村璞℃潵淇濆瓨鎿嶄綔鍙傛暟鐨勫紩鐢紝騫惰祴浜堣繖涓璞¤嚜鍔ㄨ漿鎹㈠姛鑳姐備笅闈㈡槸榪欎釜綾葷殑瀹氫箟錛?br />template <class T>
class RefToValue
{聽聽
public:
聽聽聽 RefToValue(T& ref) : ref_(ref)
聽聽聽 {}
聽聽聽 RefToValue(const RefToValue& rhs) : ref_(rhs.ref_)
聽聽聽 {}
聽聽聽 operator T& () const
聽聽聽 {
聽聽聽聽聽聽聽 return ref_;
聽聽聽 }
private:
聽聽聽 // Disable - not implemented
聽聽聽 RefToValue();
聽聽聽 RefToValue& operator=(const RefToValue&);
聽聽聽聽聽聽聽
聽聽聽 T& ref_;
};
鍙互寰堟竻妤氱殑鐪嬪埌綾葷殑瀹炵幇錛屼笅闈㈡槸涓涓伐鍏風被
template <class T>
inline RefToValue<T> ByRef(T& t)
{
聽聽聽聽 return RefToValue<T>(t);
}
涓嬮潰緇欎釜鍏蜂綋鐨勪緥瀛愶紝鍋囧
template<typename _Ty>
void SAFEDELETE(_Ty*& ptr)
{
聽聽 if (NULL != ptr)
聽聽聽聽聽 delete ptr;
聽聽 ptr = NULL;
}

char* ptr = new char;

{
聽聽聽 LOKI_ON_BLOCK_EXIT(SAFEDELETE<char>,Loki::ByRef(ptr));
}

if (NULL == ptr)
聽 std::cout << "NULL" << std::endl;
鍩烘湰涓婂氨榪欎箞澶氫簡錛宻leep鍘諱簡
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 alex_yuu



agerlis 2007-02-11 15:55 鍙戣〃璇勮
]]>
鏃墮棿綆$悊http://m.shnenglu.com/agerlis/archive/2007/02/11/18647.htmlagerlisagerlisSun, 11 Feb 2007 07:54:00 GMThttp://m.shnenglu.com/agerlis/archive/2007/02/11/18647.htmlhttp://m.shnenglu.com/agerlis/comments/18647.htmlhttp://m.shnenglu.com/agerlis/archive/2007/02/11/18647.html#Feedback0http://m.shnenglu.com/agerlis/comments/commentRss/18647.htmlhttp://m.shnenglu.com/agerlis/services/trackbacks/18647.html 鍚榪囦竴縐嶆椂闂寸鐞嗙殑鏂規硶,鏄敤鏉ユ庝箞瀹夋帓浠誨姟鍜屾椂闂寸殑,涓嬮潰鏄ぇ姒傜殑姒傚康鍥?

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽time - task

鍥句腑綆ご鎸囧悜鐨勬柟鍚戣〃紺虹揣榪害鐨勬坊鍔?閭d箞涓嬮潰鏄叧浜?,2,3,4鐨勫畾涔?

涓:浠誨姟姣旇緝閲嶈,浣嗙浉搴旂殑鏃墮棿涔熷緢绱?/p>

浜?浠誨姟鏄暱鏈熶換鍔?浣嗘瘮杈冮噸瑕?/p>

涓?涓嶉偅涔堥噸瑕佺殑浠誨姟,鏃墮棿涔熷緢澶?/p>

鍥?涓嶉渶瑕佸闀挎椂闂寸殑闈為噸瑕佷換鍔?/p>

鐜板湪鍒嗘瀽涓嬩笂闈㈢殑榪欎簺:
瀵逛簬涓:寰寰榪欎釜鏃跺欏浜庢椂闂寸殑dead line鐘舵?鑰屾鏃跺線寰鏄垜浠兘涓嶆兂瑕佺殑,鐔熻瘽璇翠簨鎯呮槸鎬ヤ笉鏉ョ殑,榪欎釜鏃跺欏線寰浼氬鑷磋川閲忕殑涓嬮檷.

瀵逛簬浜?鎴戜滑鏈夊厖瓚崇殑鏃墮棿鏉ュ仛閲嶈鐨勪換鍔?榪欐鏄垜浠兂瑕佺殑,浣?鎬庝箞鍋氭墠鑳戒嬌鍏朵笉浼氳繃娓″埌鍖洪棿涓鍛?杞負鍖洪棿1寰寰浼氱敱浜庝漢鐨勬儼鎬т駭鐢熺殑,鍏抽敭鏄鎻愬墠鍋氫簨.瀹夋帓濂芥椂闂?

瀵逛簬涓?寰寰鏄竴浜涘彲浠ヨ緟鍔╂垜浠垚闀跨殑浜嬫儏,榪欎簺涓滆タ瀵規垜浠湁鐩婂,榪欏鍏ㄩ潰鐨勫彂灞曡搗鍒頒簡寰堝ソ鐨勪綔鐢?-_-''灝辮薄鎴戝鍚変粬..

瀵逛簬鍥?鏄簺鏃墮棿绱?浣嗕笉閲嶈鐨勪換鍔?姣斿瑕佸府鍔╀漢鍘籫oogle涓浜涜祫鏂?

浠庝笂闈㈠彲浠ョ湅鍒?鍖洪棿涓瀹為檯涓婃槸鏈宸殑,浣嗕負浜嗗仛濂藉尯闂?,鎴戜滑蹇呴』瑕佸敖閲忓噺灝戝尯闂?鐨勪喚閲?鑰屽浜庡叏闈㈢殑鍙戝睍,鎴戜滑涔熻瀹夋帓鏃墮棿鍒板尯闂?.榪欎篃鏄緢閲嶈鐨?



agerlis 2007-02-11 15:54 鍙戣〃璇勮
]]>
瑙f瀽boost::anyhttp://m.shnenglu.com/agerlis/archive/2007/02/11/18648.htmlagerlisagerlisSun, 11 Feb 2007 07:54:00 GMThttp://m.shnenglu.com/agerlis/archive/2007/02/11/18648.htmlhttp://m.shnenglu.com/agerlis/comments/18648.htmlhttp://m.shnenglu.com/agerlis/archive/2007/02/11/18648.html#Feedback0http://m.shnenglu.com/agerlis/comments/commentRss/18648.htmlhttp://m.shnenglu.com/agerlis/services/trackbacks/18648.html鍓嶅嚑澶╀竴涓湅鍙嬬粰鎴戠湅浜?孌典唬鐮侊細
any temp; //any is a class
temp = 1;
temp = "a";
temp = x; //x is a abstract class

鐪嬪埌榪欐浠g爜鐫瀹炰笅浜?璺?鍒濇湡鐨勬劅瑙夎薄void*鎸囬拡閭f牱錛屽張璞ariant鍙橀噺銆備絾鎰熻榪樻槸姣旇緝鏂伴鐨勶紝-_-''涔熻鎴戞槸鑿滈笩鐨勫師鍥狅紝鍦ㄨ剳琚嬭漿浜嗕竴涓嬪悗錛屾垜瀹炵幇浜嗚嚜宸辯殑涓涓被錛岀敤鏉ユ帴鍙椾換浣曞弬鏁幫紝璧峰垵鎴戣涓篴ny搴旇鏄釜typedef,鑰屾帴鏀剁殑綾誨瀷涔熸槸鍓嶉潰鐭ラ亾鐨?-_-''鍙堟病寮勬竻闇姹傚氨鍘誨疄鐜頒簡)錛屾墍浠ュ疄鐜頒竴涓帴鏀朵換浣曞弬鏁扮殑綾婚渶瑕佷釜typelist,鍜屽姣忕綾誨瀷鐨勬硾鍖栵紝涓嬮潰鏄痗lass鐨勫畾涔夛細

template<typename _typelist>
class聽any
{
public:
聽typedef typename Loki::TL::TypeAtNonStrict<_typelist,0>::Result聽param1;
聽typedef typename Loki::TL::TypeAtNonStrict<_typelist,1>::Result聽param2;
聽typedef typename Loki::TL::TypeAtNonStrict<_typelist,2>::Result聽param3;
聽typedef typename Loki::TL::TypeAtNonStrict<_typelist,3>::Result聽param4;
聽typedef typename Loki::TL::TypeAtNonStrict<_typelist,4>::Result聽param5;

聽any(param1 param):
聽聽m_param1(param){}

聽any(param2 param):
聽聽m_param2(param){}

聽any(param3 param):
聽聽m_param3(param){}

聽any(param4 param):
聽聽m_param4(param){}

聽template<typename _Ty>
聽const _Ty&聽聽Get()
聽{
聽聽聽聽 class聽CERROR_ACCESS_DENIED;
聽聽聽聽 LOKI_STATIC_CHECK((Loki::TL::IndexOf<_typelist,_Ty>::value != -聽聽聽聽 1),CERROR_ACCESS_DENIED);

聽聽聽聽 return聽__Access<_Ty>();
聽}
private:
聽template<typename _Ty>
聽_Ty&聽 __Access();

聽template<>
聽param1& __Access<param1>() {return m_param1;}

聽template<>
聽param2& __Access<param2>() {return m_param2;}

聽template<>
聽param3& __Access<param3>() {return m_param3;}

聽template<>
聽param4& __Access<param4>() {return m_param4;}

聽param1聽聽m_param1;
聽param2聽聽m_param2;
聽param3聽聽m_param3;
聽param4聽聽m_param4;
};

typedef any<Loki::TYPE_LIST_3(int,float,char)>聽ANY;

榪欐牱浼間箮灝卞彲浠ユ帴鏀朵換浣曠被鍨嬩簡,涔熷彲浠ュ彇鍑烘暟鎹紝鍙栧嚭鏃跺繀欏昏鐭ラ亾鐩稿簲鐨勭被鍨嬶紝鑰屼笖錛屽亣濡傜被鍨嬩笉鍦ㄥ垪琛ㄩ噷闈紝鍒欑紪璇戞湡鍑洪敊
class聽CERROR_ACCESS_DENIED;
LOKI_STATIC_CHECK((Loki::TL::IndexOf<_typelist,_Ty>::value != -聽聽聽聽 1),CERROR_ACCESS_DENIED);
榪欐牱錛?_-''浼間箮灝卞彲浠ヤ簡錛屽彧瑕佹墍鎺ユ敹鐨勭被鍨嬪彲浠ユ嫹璐濆嵆鍙備絾鏈変釜鏄庝簡鐨勭己闄鳳紝閭?灝辨槸鎺ユ敹鐨勭被鍨嬪繀欏葷紪璇戞湡鍐欐錛屽亣濡備笉鍐欐鐨勮瘽錛屾垜涓漢寮濮嬬殑璁や負鏄姞涓涓熀綾伙紝-_-''
榪樻槸瑕?q鎴戦偅浣嶆湅鍙嬶紝璁╂垜浜嗚В鍒癰oost::any鐨勭敤娉?/div>
涓嬮潰鏄痓oost::any鐨勫叿浣撳垎鏋?鎴戜滑瑕佽揪鍒頒笅闈㈠嚑涓姹傦細
1錛氬彲浠ユ帴鏀朵換浣曠被鍨嬬殑鏁版嵁錛堝叿鏈塿alue灞炴?
2: 鍙互鏂逛究鐨勫彇鍑烘暟鎹?/div>
3錛氬瀷鍒畨鍏紝涓嶈薄void*
涓嬮潰鏄痓oost::any鐨勫疄鐜幫紝鎴戞寜閮ㄥ垎璐達紝鑰屼笖鐪佸幓鎴戣涓轟笉閲嶈鐨勪笢瑗匡紝鍥犱負澶暱浜嗭紝榪欎細褰卞搷鎴慴log鐨勬敹瑙嗙巼銆?/div>
1錛氶鍏堟潵鐪嬩笅浠栫殑鏋勯犲拰紼鏋?-_-''閿欏埆瀛楋級
聽any()
聽聽聽聽: content(0)
{
}
聽template<typename ValueType>
聽any(const ValueType & value)
聽聽聽聽: content(new holder<ValueType>(value))
{
}
any(const any & other)
聽聽聽聽: content(other.content ? other.content->clone() : 0)
聽{
聽}
聽~any()
聽{
聽聽聽聽聽delete content;
聽}
浠庢瀯閫犲嚱鏁板彲浠ョ湅鍒幫紝any鍙互鎺ュ彈榛樿鐨勶紝浠諱綍鍏朵粬鍊煎寘鎷琣nt鏈韓錛屽湪紼鏋勯噷闈㈠彲浠ョ湅鍒板content鐨勯噴鏀撅紝content鍦ㄨ繖閲屾槸涓涓熀綾葷殑鎸囬拡錛屾槸any鍐呴儴瀹炵幇鐨勶紝鎴戜滑鍙互鐪嬪埌錛屽湪瀵筧ny鏋勯犳槸鏈夌鏂規硶錛?/font>
錛?錛塩ontent(new holder<ValueType>(value))
錛?錛塩ontent(other.content ? other.content->clone() : 0)
紼嶅悗浼氱湅鍒癶older鏄淳鐢熻嚜content綾誨瀷鐨勪竴涓ā鏉垮疄鐜幫紝涔熻璁插埌榪欓噷錛屾湁浜涘簲璇ユ槑鐧戒簡any鏄庝箞淇濆瓨浠諱綍綾誨瀷鐨勫惂錛屽浜庡叾浠朼ny鐨勬瀯閫狅紝鎴戜滑鍙戠幇璋冪敤浜哻ontent鐨勪竴涓猚lone鏂規硶錛屽緢鏄庢樉榪欐槸content鐨勪竴涓櫄鏂規硶錛岃繖涓柟娉曠殑瀛樺湪寰椾互璁╂垜浠繍鐢ㄨ櫄鍑芥暟鐨勬満鍒舵紜殑鎷瘋礉瀵硅薄錛屼笅闈細鐪嬪埌榪欏彧鏄釜綆鍗曠殑new鎿嶄綔銆?/font>
2:鏉ョ湅涓媋ny鐨刼perator =鐨勯噸杞?/div>
any & swap(any & rhs)
{
聽聽聽聽聽std::swap(content, rhs.content);
聽聽聽聽聽return *this;
}
template<typename ValueType>
any & operator=(const ValueType & rhs)
{
聽聽聽聽any(rhs).swap(*this);
聽聽聽聽return *this;
}
any & operator=(const any & rhs)
{
聽聽聽聽聽聽any(rhs).swap(*this);
聽聽聽聽聽聽return *this;
}
鍙互鐪嬪埌operator =錛屾帴鏀朵換浣曞叾浠栫被鍨嬬殑鍙傛暟錛宻wap鏂規硶鐨勫疄鐜幫紝鐢ㄦ潵浜ゆ崲2涓璞$殑content鎸囬拡錛屾垜浠彲浠ョ湅鍒皁perator =閲岄潰涓存椂瀵硅薄鐨勬瀯寤猴紝鍦ㄥ嚱鏁扮粨鏉熷悗錛岃嚜鍔ㄩ噴鏀懼師鏉ontent鐨勫璞★紝榪欐湁鐐筊AII鍛抽亾銆傦紙http://blog.sina.com.cn/u/1019039487)鐙灝忚彍銆傘?/font>
3錛氫笅闈㈡潵鐪嬩笅杈呭姪綾?/div>
bool empty() const
聽{
聽聽聽聽聽聽return !content;
聽}
聽const std::type_info & type() const
聽{
聽聽聽聽聽聽return content ? content->type() : typeid(void);
聽}
鍙互鐪嬪埌銆備竴涓猠mpty,涓涓猼ype,寰堝艦璞°?/div>
4錛氫笅闈㈡潵鐪嬩笅涓婇潰content鎵鎸囩殑瀵硅薄錛屼互鍙奱ny鎬庝箞淇濆瓨浠諱綍綾誨瀷錛屼互鍙婅繖縐嶆庝箞淇濊瘉鍨嬪埆瀹夊叏
class placeholder
{
public: // structors
聽聽聽聽聽virtual ~placeholder()
聽聽聽聽聽{
聽聽聽聽聽}
public: // queries
聽聽聽聽聽聽virtual const std::type_info & type() const = 0;
聽聽聽聽聽聽virtual placeholder * clone() const = 0;
};
template<typename ValueType>
class holder : public placeholder
{
public: // structors
聽聽聽聽聽holder(const ValueType & value)
聽聽聽聽聽聽聽聽聽聽聽聽聽 : held(value)
聽聽聽聽聽{
聽聽聽聽聽}
public: // queries
聽聽聽聽聽virtual const std::type_info & type() const
聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽return typeid(ValueType);
聽聽聽聽聽}
聽聽聽聽聽virtual placeholder * clone() const
聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽return new holder(held);
聽聽聽聽聽}
public: // representation
聽聽聽聽聽ValueType held;
};(-_-''鏍煎紡鐭鐪熸槸綾誨晩)
placeholder灝辨槸涓婇潰content鎸囧悜鐨勫璞★紝鍙互鐪嬪埌浠栧畾涔夌殑涓浜涙彁渚涚粰any璋冪敤鐨勫嚱鏁板拰铏氬熀鏈繀欏葷殑铏氱█鏋勫嚱鏁幫紙鍙互鐪嬪埌any瀵筩ontent璋冪敤浜哾elete)
涓嬮潰鏄?font color="#0000ff">holder鐨勫疄鐜幫紝holder鏄竴涓ā鏉匡紝閲岄潰瀹氫箟鐨?/font>
ValueType held;
寰堟槑鏄熸槸any鐢ㄦ潵淇濆瓨浠諱綍綾誨瀷鐨勶紝鍥為【涓嬩笂闈㈡墍璇寸殑any鍒濆鍖朿ontent鐨?縐嶆柟娉?/font>
錛?錛塩ontent(new holder<ValueType>(value))
錛?錛塩ontent(other.content ? other.content->clone() : 0)
浠庤繖涓湴鏂瑰彲浠ョ湅鍒版庝箞鍒濆鍖杊older瀵硅薄錛屽茍淇濆瓨鍒癱ontent.娉ㄦ剰鍒拌繖閲岀殑held鏄痯ublic鐨勶紝榪欐牱灝辨彁渚涗簡瀵規暟鎹闂殑鍔熻兘錛屽湪璁塊棶鐨勬椂鍊欏繀欏昏鐭ラ亾鍏蜂綋瑕佽闂殑綾誨瀷錛屾墠鑳借皟鐢ㄧ浉搴旂殑static_cast鎴栬卍ynamic_cast鏉ユ搷浣滐紝鑰岃繖鏍峰叾瀹炰篃鎻愪緵浜嗗瀷鍒畨鍏ㄧ殑淇濊瘉錛宔g:涓嶈薄malloc,榪斿洖void*,鐒跺悗()杞崲涓涓嬨?/font>
5錛氱湅涓嬫庝箞璁塊棶any閲岄潰鐨勫睘鎬у鹼細榪欓噷灝變笉鍒椾婦鍑烘墍鏈夌殑瀹炵幇錛屽洜涓烘湁浜涙槸瀵筩onst鐨勭増鏈?/div>
template<typename ValueType>
ValueType * any_cast(any * operand)
{
聽聽聽聽return operand && operand->type() == typeid(ValueType)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ? &static_cast<any::holder<ValueType> *>聽 (operand->content)->held
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 : 0;
}
template<typename ValueType>
ValueType any_cast(const any & operand)
{
聽聽聽聽聽typedef BOOST_DEDUCED_TYPENAME聽聽聽聽聽聽聽 remove_reference<ValueType>::type nonref;
聽聽聽const nonref * result = any_cast<nonref>(&operand);
聽聽聽if(!result)
聽聽聽聽聽聽聽聽聽聽聽 boost::throw_exception(bad_any_cast());
聽聽聽聽return *result;
}//榪欓噷鍘繪帀1浜涘師鏉ュ疄鐜扮殑浠g爜鍜屾敞閲?/font>
鍙互鐪嬪埌鍏蜂綋鐨勫疄鐜版柟寮忥紗dynamic_cast鐨勯昏緫宸笉澶氾紝瀵瑰紩鐢ㄧ殑cast鏈夊彲鑳芥姏鍑哄紓甯搞傞氳繃涓婇潰榪欑鏂瑰紡錛屽氨杈懼埌浜嗗鏁版嵁鐨勮鍙栵紝璇誨彇鏃跺繀欏葷煡閬撻噷闈㈢殑鏁版嵁綾誨瀷銆傚彲浠ョ湅鍑篴ny鍙兘淇濆瓨涓涓鹼紝-_-''涓嶅悜鎴戦偅涓紝鍙互鍚屾椂淇濆瓨涓嶅悓綾誨瀷鐨勫箋?/font>
6錛歟xtension
鍙互閫氳繃std::vector<boost::any> anys,鏉ユ瀯寤轟竴涓換浣曠被鍨嬬殑鍒楄〃錛屼絾璁塊棶姣旇緝楹葷儲銆?/div>
涔熷彲浠ラ氳繃any鏉ヨ揪鍒拌櫄鍑芥暟涓嶈兘涓簍emplate鐨勯檺鍒訛紙鍥犱負涓涓槸闈欐佺殑涓涓槸鍔ㄦ佺殑錛?/div>
璞′笅闈細
class CBase
{
聽public:
聽聽聽聽 virtual void Set(boost::any) = 0;
};
class CHild:
聽聽聽聽 public CBase
{
聽public:
聽聽聽聽 virtual void Set(boost::any param)
聽聽聽聽 {
聽聽聽聽聽聽聽聽聽 m_value = param;
聽聽聽聽 }
聽private:
聽聽聽聽 boost::any聽 m_value;
};
CHild聽test;
CBase* ptr = &test;
ptr->Set(1);
ptr->Set('a');
7.finish...鎬葷畻瀹屾垚浜?..-_-''瑕佸彉鍞愬儳浜?..
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 alex. agerlis@163.com


agerlis 2007-02-11 15:54 鍙戣〃璇勮
]]>瀛︿範abstract factory絎旇http://m.shnenglu.com/agerlis/archive/2007/02/11/18645.htmlagerlisagerlisSun, 11 Feb 2007 07:53:00 GMThttp://m.shnenglu.com/agerlis/archive/2007/02/11/18645.htmlhttp://m.shnenglu.com/agerlis/comments/18645.htmlhttp://m.shnenglu.com/agerlis/archive/2007/02/11/18645.html#Feedback0http://m.shnenglu.com/agerlis/comments/commentRss/18645.htmlhttp://m.shnenglu.com/agerlis/services/trackbacks/18645.htmlabstract factory.鎰熻鏄釜寰堢巹鐨勫悕瀛楋紝鍗充嬌鍦ㄦ垜鍐欏涔犵瑪璁扮殑鏃跺欙紝鎴戜篃鍥犱負緙哄皯鐜板疄涓殑瀹炶返鑰屽鍏朵簡瑙d笉娣便俕^甯屾湜.... 澶氭寚姝?br />Name:
聽聽 abstract factory
Addressed Problem:
聽聽 鎻愪緵瀵瑰悓1縐嶇浉鍏沖璞$殑鍒涘緩銆傛瘮濡傚湪紼嬪簭閲岄潰錛屽笇鏈涙牴鎹敤鎴烽厤緗潵璁劇疆UI鏂規錛屾瘮濡傛柟妗?鍜?錛屽搴旂殑UI涔熷瓨鍦?濂椾笉鍚岀殑瀹炵幇綾伙紝姣斿瀵逛簬ScrollBar,鏈塁ScrollBar1鍜孋ScrollBar2錛岄兘緇ф壙鑷猄crollBar銆備篃璁稿湪紼嬪簭閲岄潰鏈夊緢澶氳繖鏍風殑綾匯傝繖鏍蜂綘鍦ㄥ簲鐢║I瀹炰緥鍖栫被鏃跺氨蹇呴』瑕侀夋嫨姣斿
IScrollBar* pScrollBar = NULL;
if (_use_ui_1)
聽聽 pScrollBar = new CScrollBar1;
else
聽聽 pScrollBar = new CScrollBar2;
涔熻浣犺繖鏍鋒劅瑙夋病澶氬ぇ鍏崇郴錛屼絾鎯寵薄涓嬶紝鍦ㄧ▼搴忕殑澶氬閮藉瓨鍦ㄨ繖鏍風殑閫夋嫨錛屼負浠涔堟垜涓嶉夋嫨涓縐峫ess error phone鐨勬柟娉曞憿錛熸瘮濡?br />pScrollBar = Create(...);
榪欐牱涓縐嶇畝鍗曠殑鏂瑰紡鍛紵鑰屼笖涓婇潰鐨勫啓娉曚篃寮曡繘浜?涓伩鐭紝涔熷氨鏄湪浜х敓pScrollBar鏃訛紝娑夊強鍒頒簡鍏蜂綋鐨勫疄鐜扮被錛岃繖鍦ㄩ潰鍚戝璞¤繖縐峱rogram to interface榪欐牱鐨勮璦涓槸寰堝繉璁崇殑浜嬫儏銆傛瘮濡傦紝鍦ㄥ姞縐峌I鏂規錛屼篃璁鎬綘浼氬啀鍐欎釜else,榪欐牱絳変簬鑷繁鎶婅嚜宸卞線鐏爢閲岄潰鎺ㄣ備綘鏄竴涓嫟濂嬬殑紼嬪簭鍛橈紝浣嗕笉鏄釜浼樼鐨勭▼搴忓憳^^.涔熻鏈変漢浼氳錛屾垜鍙互鍒╃敤prototype榪欐牱鐨勬柟寮忔潵鍟娿傝繖鏍鳳紝鍦ㄧ▼搴忕殑澶栭潰閰嶇疆涓涓嬫瘡涓被鐨刾rototype灝卞彲浠ヤ簡錛屾垨璁鎬篃鍙互鐢╫bject factory鍟婏紝閮藉彲浠ワ紙^^浼間箮鏄摝錛屾垜涔熸病瀛﹁繃榪?涓殑璇達級瑙e喅涓婇潰鐨勯棶棰橈紝涓涓氳繃DoClone綾諱技鐨勶紝1涓氳繃ID鎴栧叾浠栫殑錛屽叾瀹炲湪搴旂敤涓婇潰鐨?縐嶆椂錛岃嚜鐒剁殑瀵煎嚭浜哸bstract factory.涓轟粈涔堝憿錛屽洜涓轟笂闈㈢殑2縐嶏紝浣犻兘闇瑕佽緗涓殑鍘熷瀷鎴朓D銆傛瘮濡備篃璁稿湪CUIManager鐨勬瀯閫犻噷闈㈠啓璐煎ぇ鐨刬f
if (_use_ui_1)
{
聽聽聽 ...//璁劇疆UI_1涓嬫墍鏈夌殑prototype
}
else
{
聽聽聽 ...//璁劇疆UI_2涓嬫墍鏈夌殑prototype
}
涔熻鍦ㄥ皢鏉ョ殑鑾ぉ錛屽湪鍔犱笂UI_3,鍒欍傚啀鍐欎釜if.涔熻澶у鍙兘浼氭兂錛屾垜鍦ㄥ簲鐢╱i鏃訛紝鎴戝氨鐭ラ亾浜嗘墍瑕佸垱寤虹殑瀵硅薄錛屼負浠涔堟垜涓嶆妸涓婇潰瀹濊涓涓嬫敼鎴愶細
if (_use_ui_1)
聽//璁劇疆factory_1
else
聽//璁劇疆factory_2
鐒跺悗鍦ㄦ娊璞″嚭鏉ョ殑IFactory閲岄潰鎻愪緵鍒涘緩榪欎簺UI Class鐨勬柟娉曪紝姣斿錛孋reateScrollBase.絳夌瓑錛岃繖鏍峰氨鏈変簡abstract factory 鐨勯洀褰€?br />鍩虹瀹炵幇
/*
聽嫻嬭瘯abstract factory妯″紡
*/

class聽IScrollWindow
{
public:
聽virtual void聽DrawScroll(void) = 0;
};

class聽IListWindow
{
public:
聽virtual聽void聽DrawList(void) = 0;
};

class聽ICreateWindowFactory
{
public:
聽virtual聽IScrollWindow*聽CreateScrollWindow(void) = 0;

聽virtual聽IListWindow*聽CreateListWindow(void) = 0;
};

class聽CBlueWindowFactory:
聽public聽ICreateWindowFactory
{
聽class聽CBlueScrollWindow:
聽聽public聽IScrollWindow
聽{
聽public:
聽聽virtual void聽DrawScroll(void)
聽聽{
聽聽聽std::cout << "draw blue scroll" << std::endl;
聽聽}
聽};

聽class聽CBlueListWindow:
聽聽public聽IListWindow
聽{
聽public:
聽聽virtual聽void聽DrawList(void)
聽聽{
聽聽聽std::cout << "draw blue list" << std::endl;
聽聽}
聽};
public:
聽virtual聽IScrollWindow*聽CreateScrollWindow(void)
聽{
聽聽return聽new CBlueScrollWindow;
聽}

聽virtual聽IListWindow*聽CreateListWindow(void)
聽{
聽聽return聽new CBlueListWindow;
聽}
};

class聽CRedWindowFactory:
聽public聽ICreateWindowFactory
{
聽class聽CRedScrollWindow:
聽聽public聽IScrollWindow
聽{
聽public:
聽聽virtual void聽DrawScroll(void)
聽聽{
聽聽聽std::cout << "draw red scroll" << std::endl;
聽聽}
聽};

聽class聽CRedListWindow:
聽聽public聽IListWindow
聽{
聽public:
聽聽virtual聽void聽DrawList(void)
聽聽{
聽聽聽std::cout << "draw red list" << std::endl;
聽聽}
聽};
public:
聽virtual聽IScrollWindow*聽CreateScrollWindow(void)
聽{
聽聽return聽new CRedScrollWindow;
聽}

聽virtual聽IListWindow*聽CreateListWindow(void)
聽{
聽聽return聽new CRedListWindow;
聽}
};
鍦ㄩ渶瑕佺敤鐨勫湴鏂癸紝灝卞彲浠ヨ繖鏍鳳細
ICreateWindowFactory*聽pCreateWindow1聽= new CBlueWindowFactory;

聽pCreateWindow1->CreateListWindow()->DrawList();
聽pCreateWindow1->CreateScrollWindow()->DrawScroll();
鍋囧闇瑕佺敤涓嶅悓鐨勫伐鍘傦紝鍒欐洿鎹笉浼氬獎鍝嶅埌璋冪敤澶勭殑浠g爜銆傚洜涓烘帀鐢ㄥ伐鍘傜殑鍦版柟鏄潰鍚戞帴鍙g殑銆傚叾瀹瀉bstract factory鐨勭悊蹇靛簲璇ユ槸姣旇緝綆鍗曠殑(^^鐬庣寽鐨?.鍩烘湰璁插畬浜嗕粈涔堟槸鎶借薄綾誨伐鍘傦紝浠栬瑙e喅鐨勪竴浜涢棶棰樹互鍙婃庝箞瑙e喅鍜?涓皬鑰屼貢鐨刣emo浠g爜孌點備笅闈㈡潵鐪嬩笅鎴戜滑鎬庝箞娉涘寲榪欎釜綾誨伐鍘傦紝榪欎釜浼氭秹鍙婂埌loki閲岄潰鐨勫叿浣撳疄鐜幫紝澶у瑕佸姞婊℃補鍟婏紝鍥犱負娉涘寲綾誨伐鍘傛槸涓浠朵笉瀹規槗鐨勪簨鎯呭晩銆?/p>

娉涘寲_1
棣栧厛錛?^^榪欓儴鍒嗘垜涔熶笉鏄緢鎳?瑕佹硾鍖栫殑鏄痑bstract factory鐨勬帴鍙o紝灝辮薄涓婇潰鐨凜reateScrollWindow鍜孋reateListWindow錛屽湪娉涘寲鏃墮渶瑕佺殑淇℃伅鏄鍒涘緩鐨勫悓1緇勫璞$殑鐩稿叧鎺ュ彛姣斿IScrollBar,IList絳夌瓑錛屽湪loki閲岄潰錛岃涓?涓被娉涘寲1緇勬帴鍙o紝鍙互閫氳繃GenScatterHierarchy鏉ュ皢unit搴旂敤鍒皌ypelist閲岀殑姣?涓被鍨嬶紝騫跺皢璇ョ被浠巙nit<type>媧劇敓錛屼粠鑰屽緱鍒?緇勬帴鍙c侴enScatterHierarchy鍋氫簡浠涔堝憿錛屼粬浜х敓浜嗗暐鍛紵鍏蜂綋鐨勫彲浠ョ湅morden c++閲岄潰鐨勫疄鐜般傞氳繃GenScatterHierarchy鎴戜滑寰楀埌浜嗘垜浠寰?緇勬帴鍙c備笅闈㈡槸loki閲岄潰瀵硅繖涓緱鐩稿叧瀹炵幇
template <class T>
class AbstractFactoryUnit
{
public:
聽聽聽聽virtual T* DoCreate(Type2Type<T>) = 0;
聽聽聽聽virtual ~AbstractFactoryUnit() {}
};

鍙互鐪嬪埌錛屼笂闈㈠畾涔変簡2涓嚱鏁幫紝鑰岃繖涓被灝辨槸鎴戜笂闈㈣寰楄皟鐢℅enScatterHierarchy鏃訛紝鍏風幇鍖栨椂瀵箃ypelist寰楁瘡涓被鍨嬪簲鐢ㄥ緱template綾伙紝鑰屾渶鍚庝駭鐢熷緱涔熷皢鏄被浼?font color="#0000ff">AbstractFactoryUnit<IScrollBar>鐨勭被錛?/font>鎴戜滑鍏蜂綋鐨勬娊璞″伐鍘備粠榪欎簺媧劇敓銆傝嚦浜巔ure dctor榪欎釜澶у搴旇閮界煡閬撳暐浣滅敤銆備笅闈㈡潵鐪婣bstract Factory 鐨勬硾鍖栵細

template
<
聽聽聽聽class TList,
聽聽聽聽template <class> class Unit = AbstractFactoryUnit
>
class AbstractFactory : public GenScatterHierarchy<TList, Unit>
{
public:
聽聽聽聽聽typedef TList ProductList;
聽聽聽聽聽聽聽
聽聽聽聽聽template <class T> T* Create()
聽聽聽聽聽{
聽聽聽聽聽聽聽聽Unit<T>& unit = *this;
聽聽聽聽聽聽聽聽return unit.DoCreate(Type2Type<T>());
聽聽聽聽聽}
聽};
鍙互鐪嬪埌榪欎釜鍗崇敱GenScatterHierarchy鏉ュ緱鍒頒簡鎴戜滑鎯寵鐨勪笢瑗褲傛彁渚涗簡Create鐨勬ā鏉垮嚱鏁幫紝浣垮緱鎴戜滑鍙互璞¤繖鏍穎actory.Create<IScrollBar>()鐨勬柟渚垮艦鍔挎潵璋冪敤銆侾roductList鏄浜庢娊璞″伐鍘傝鍒涘緩鐨勭被鍨嬬殑閲嶅懡鍚嶃傛柟渚垮悗闈㈠湪浜х敓瀹為檯鐨勭被鍨嬫椂錛岃幏鍙栧搴旂殑綾誨瀷淇℃伅錛屽浜嶥oCreate鐨勫弬鏁幫紝澶у搴旇閮芥槑鐧借繖鏄噸杞界敤鐨勶紝閭g敤鍦ㄥ摢閲屽憿錛熶笅闈細浠嬬粛銆?/font>

娉涘寲_2
鍦ㄨ緵鑻︿粙緇嶅畬娉涘寲鎶借薄宸ュ巶鐨勬帴鍙e悗錛屾垜浠彲浠ラ氳繃綾諱技鐨勬柟寮忔潵瀹氫箟1涓猘bstract factory鐨勬帴鍙?br />Loki::AbstractFactory<LOKI_TYPELIST_2(IScrollBar,IListWindow)>
涓嬮潰鎴戜滑鏉ヤ粙緇嶆渶鍚庣殑錛屾垜浠庝箞鏉ユ彁渚涙娊璞″伐鍘傜殑瀹炵幇錛岄鍏堟槸瀵硅薄鐨勫垱寤猴紝loki閲岄潰鎻愪緵浜嗛粯璁ょ殑鍒涘緩鐨勬柟娉曪紝褰撶劧鎴戜滑鍙互淇敼鎴栫敤鐗瑰寲鐨勭増鏈潵鍋氶夋嫨銆?br />template <class ConcreteProduct, class Base>
class OpNewFactoryUnit : public Base
{
聽聽聽聽 typedef typename Base::ProductList BaseProductList;
聽聽聽
protected:
聽聽聽聽聽typedef typename BaseProductList::Tail ProductList;
聽聽聽
public:
聽聽聽聽聽typedef typename BaseProductList::Head AbstractProduct;
聽聽聽聽聽ConcreteProduct* DoCreate(Type2Type<AbstractProduct>)
聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽 return new ConcreteProduct;
聽聽聽聽聽}
};
鍙互鐪嬪埌DoCreate鏄垜浠殑鏍稿績閮ㄥ垎錛岄噷闈㈣皟鐢ㄤ簡new鏉ュ垱寤哄璞°傝岃繖閲屼篃璁╂垜浠湅鍒拌繖搴旇鏄笂闈㈠垱寤哄璞$殑閲嶈澆銆傝孴ype2Type鐨勪綔鐢ㄦ鏄湪榪欓噷浣撶幇浣滅敤錛屽洜涓篶++鏃犳硶閫氳繃鍑芥暟榪斿洖鍊兼潵閲嶈澆涓嶅悓鐨勫璞°備篃璁鎬綘浼氱湅鍒頒笂闈㈢殑涓浜涚被鍨嬪畾涔夛紝鍖呮嫭OpNewFactoryUnit鐨?涓ā鏉垮弬鏁幫紝絎?涓ā鏉垮弬鏁版槸瀹炵幇GenLinearHierarchy蹇呭鐨凣enLinearHierarchy鍜屼笂闈㈢殑GenScatterHierarchy鐨勬牳蹇冩濇兂涓鏍鳳紝閮芥槸閫氳繃鍏風幇鍖栨潵瀹炵幇鐨勶紝涓嶈繃GenLinearHierarchy浜х敓鐨勬槸綰挎х殑緇ф壙浣撶郴錛屼腑闂村す鏉傜潃姣斿OpNewFactoryUnit<IScrollBar,GenLinearHierarchy<...> >榪欐牱鐨勫艦鍔褲備笅闈㈡潵鐪嬩笅鎶借薄宸ョ▼鐨勫叿浣撳疄鐜扮殑娉涘寲錛岃仈緋昏搗鏉ュ氨鑳藉涓婇潰鐨勭悊瑙d簡
template
<
聽聽聽聽class AbstractFact,
聽聽聽聽template <class, class> class Creator = OpNewFactoryUnit,
聽聽聽聽class TList = typename AbstractFact::ProductList
>
class ConcreteFactory
聽聽聽聽聽: public GenLinearHierarchy<
聽聽聽聽聽typename TL::Reverse<TList>::Result, Creator, AbstractFact>
{
public:
聽聽聽聽typedef typename AbstractFact::ProductList ProductList;
聽聽聽聽typedef TList ConcreteProductList;
};
鍙互鐪嬪埌ConcreteFactory鐢盙enLinearHierarchy鏉ラ┍鍔ㄤ駭鐢熸垜浠兂瑕佺殑錛屾湰鏉ヨ繖涓創鍥炬瘮杈冩槑鏈楃偣錛屼絾鎴戞噿鐨勭敾錛屽搱鍝堛備粠GenLinearHierarchy鐨勫弬鏁版潵鐪嬶紝絎?涓槸鍏蜂綋鐨勫疄鐜扮被鐨則ypelist,姣斿LOKI_TYPELIST2(CScrollBar_1,CListWindow_1),鑷充簬涓轟粈涔堣瀵圭被鍨嬪仛reverse鎿嶄綔錛屽洜涓哄湪綾葷殑鍩虹浣撶郴浜х敓鍚庯紝typelist鐨勭1涓厓绱狅紝鍦ㄧ戶鎵夸綋緋繪槸鐢變笅寰涓婄殑錛岃屼簬涓婇潰鐢監pNewFactoryUnit絳夊畾涔夌殑ProductList鐨凥ead瀹氫箟鐨勮嚜涓婂線涓嬬殑鏄浉鍙嶇殑錛屾墍浠ヨ繖閲屽簲鐢ㄤ簡reverse鎿嶄綔銆侰reator灝辨槸涓婇潰鐨凮pNewFactoryUnit鎴栦綘鑷畾涔夌殑鍏冪礌銆傚茍鍦ㄥ叿鐜板寲鏄紝搴旂敤typelist鐨勬瘡涓被鍨嬨侫bstractFact鏄戶鎵夸綋鐜扮殑鏈欏剁錛岃繖涓簲璇ュ緢鏄庢樉錛屽氨鏄笂闈㈠畾涔夌殑AbstractFactory,榪欐牱鍟ラ兘鏄庣‘浜嗭紝鍏蜂綋鐨勬帴鍙o紝瀵規帴鍙g殑鍑芥暟鐨勯噸杞介兘宸茬粡娉涘寲瀹屾垚銆備笅闈㈡槸錛坁^鐫℃浜嗭紝鐫¤鍘諱簡錛岀畝鍗曚粠渚匡紝涓婇潰鍧囨湭璋冭瘯鍝?.鑷充簬涓轟粈涔堜細鎶婄3涓弬鏁伴粯璁や負鎶借薄綾誨伐鍘傛帴鍙g殑ProductList錛岃繖涓拰loki鐢ㄥ熀浜巔rototype鐨凜reator鏈夊叧緋匯傘?^^淇烘槸鑿滈笩錛屽氨鍙兘鍒拌繖閲屼簡)
瀵筧bstract factory鐨勭湅娉曪紝浼樼偣鍦ㄤ笂闈㈢殑宸茬粡璇磋繃浜嗭紝紜畾鍦紝鎴戜滑瑕佹坊鍔?縐嶅璞$殑鍒涘緩鏃訛紝閮借鍘諱慨鏀規帴鍙g殑瀹氫箟錛屽綋鐒跺悗闈㈢殑娉涘寲涔熶負鎴戜滑瑙e喅浜嗕簺闂錛屼絾娉涘寲瀵逛簬鍙傛暟鐨勪紶閫掍笉鎬庝箞濂界敤錛屽彲浠ラ氳繃鎻愪緵鏂扮殑OpNewFactoryUnit鏉ラ傚綋瑙e喅銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 agerlis.2007.2.10 0:22


agerlis 2007-02-11 15:53 鍙戣〃璇勮
]]>
璇誨彇鍛戒護琛屽弬鏁?/title><link>http://m.shnenglu.com/agerlis/archive/2007/02/11/18646.html</link><dc:creator>agerlis</dc:creator><author>agerlis</author><pubDate>Sun, 11 Feb 2007 07:53:00 GMT</pubDate><guid>http://m.shnenglu.com/agerlis/archive/2007/02/11/18646.html</guid><wfw:comment>http://m.shnenglu.com/agerlis/comments/18646.html</wfw:comment><comments>http://m.shnenglu.com/agerlis/archive/2007/02/11/18646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/agerlis/comments/commentRss/18646.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/agerlis/services/trackbacks/18646.html</trackback:ping><description><![CDATA[ <div>浠ュ墠C璇誨彇鍛戒護琛屽弬鏁版劅瑙夊お楹葷儲,鑰屼笖涓嶅鏄撹蹇?涓嬮潰鏄彟澶栦竴縐嶅懡浠よ鐨勮鍙栨柟娉?/div> <div>閫氳繃GetCommandLine(),鏉ヨ繑鍥炲綋鍓嶇殑鍛戒護琛?</div> <div> <font color="#0000ff">setlocale(LC_ALL, ".ACP");<br />std::wcout << GetCommandLine() << std::endl;</font> </div> <div> <font color="#000000">涓嬮潰鏄緭鍑?</font> </div> <div> <font color="#0000ff">"e:\瀛︿範紼嬪簭\consol3\debug\consol3.exe" a b c</font> </div> <div> <font color="#000000">瀵逛簬鍛戒護琛岀殑鍙傛暟璇誨彇鐢–ommandLineToArgvW,鍙互鎶婂懡浠よ鍙傛暟杞崲鎴愬瓧絎︿覆鏁扮粍鐨勫艦寮?/font> </div> <div> <font color="#0000ff">int聽nums = 0;<br />TCHAR** temp = CommandLineToArgvW(GetCommandLine(),&nums);</font> </div> <div> <font color="#0000ff">for(int i = 0; i < nums; i++)<br />{<br />聽 std::wcout<< temp[i] << std::endl;<br />}</font> </div> <div> <font color="#000000">涓嬮潰鏄緭鍑?</font> <br /> <font color="#0000ff">e:\瀛︿範紼嬪簭\consol3\debug\consol3.exe<br />a<br />b<br />c</font> <br />鍙互鐪嬪埌鍛戒護琛屽弬鏁頒粠涓嬫爣=1鐨勫厓绱犲紑濮?</div> <div>鎰熻榪欑褰㈠紡姣旇緝濂借蹇?/div> <img src ="http://m.shnenglu.com/agerlis/aggbug/18646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/agerlis/" target="_blank">agerlis</a> 2007-02-11 15:53 <a href="http://m.shnenglu.com/agerlis/archive/2007/02/11/18646.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬handle-body鐨勭敤娉曞強loki::PimplT鐨勫垎鏋?/title><link>http://m.shnenglu.com/agerlis/archive/2007/02/11/18644.html</link><dc:creator>agerlis</dc:creator><author>agerlis</author><pubDate>Sun, 11 Feb 2007 07:52:00 GMT</pubDate><guid>http://m.shnenglu.com/agerlis/archive/2007/02/11/18644.html</guid><wfw:comment>http://m.shnenglu.com/agerlis/comments/18644.html</wfw:comment><comments>http://m.shnenglu.com/agerlis/archive/2007/02/11/18644.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/agerlis/comments/commentRss/18644.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/agerlis/services/trackbacks/18644.html</trackback:ping><description><![CDATA[ <p> <font color="#660000">handle-body</font>,鐫℃浜嗭紝浣嗚繕鏄緱鍧氭寔涓嬨傚叾瀹炶繖涓槸寰堢畝鍗曠殑姒傚康<br />榪欎釜涔熺О鍛間負<font color="#660000">pimpl</font>,鏄痯rivate implemention鐨勭緝鍐欙紝涓嬮潰娑夊強鍒扮殑閮藉彨鍋歱impl, 閭g敤榪欎釜鍒板簳鏈変粈涔堝ソ澶勫憿錛?br />1錛氬彲浠ユ妸鍏蜂綋鐨勫疄鐜頒粠client绔皝瑁咃紝榪欐牱鍗充嬌淇敼瀹炵幇錛屽彧瑕佷笉淇敼澶存枃浠訛紝瀵筩lient绔潵璇達紝鏄病鏈変換浣曞獎鍝嶇殑錛岀敋鑷充笉鏀瑰彉浠g爜鐨?榪涘埗鐗規?br />2錛氬姞閫熺紪璇戞椂闂達紝鎴戜滑鐭ラ亾鏈夋椂澶存枃浠舵湁澶鐨勫疄鐜幫紝浼氬鑷村寘鍚繖涓ご鏂囦歡鐨勫叾浠栨枃浠剁殑緙栬瘧鏃墮棿澧炲姞錛岄氳繃pimpl,鎴戜滑鎶婂疄鐜頒粠澶存枃浠剁Щ鍒癱pp閲岄潰錛屼粠鑰屽噺灝戜簡鍏朵粬鍖呭惈榪欎釜鏂囦歡鐨勭紪璇戞椂闂達紝鍔犲揩緙栬瘧閫熷害<br />3錛氬噺灝戜緷璧栵紝榪欎釜瀹為檯涓婁篃澧炲姞浜嗙紪璇戠殑閫熷害錛屽彲浠ヤ笉瀵筩lient绔毚闇蹭竴浜涘疄鐜頒笂鐨勫ご鏂囦歡錛屼粠鑰屽噺灝戜簡渚濊禆璇翠簡榪欎箞澶氾紝涓嬮潰鏉ョ湅涓嬩竴涓畝鍗曠殑pimpl鐨勫疄鐜般傛槸鐢╨oki鐨勭被鏉ュ疄鐜扮殑銆傚搱鍝堬紝鐫℃浜嗭紝鍋鋒噿<br /><font color="#0000ff">/*.h*/<br />class CTest<br />{<br />public:<br />聽聽聽 void Test();<br />private:聽<br />聽聽聽聽Loki::PimplT::Type m_impl;<br />};<br />------------------------------------------------------------------- /*.cpp*/<br />template<><br />struct Loki::ImplT<br />{<br />public:<br />聽聽 聽void Test() { std::cout << "test" << std::endl; }<br />};<br /><br />void CTest::Test() { return m_impl->Test(); }</font><br />涓婇潰鍙槸涓緢綆鍗曞緢綆鍗曠殑渚嬪瓙,浠ヨ嚦浜庢湁浜涜繕鏃犳硶浣撲細鍒皃impl鐨勪綔鐢紝浣嗙浉淇″湪瀹炶返涓綘浼氫綋浼氬埌錛屾妸鍘熸潵瀹氫箟鍦–Test閲岄潰鐨勪竴浜涚鏈夌殑鏂規硶錛屾垚鍛橈紝鍏ㄩ儴鎸埌ImplT閲岄潰鏃訛紝浣犱細浣撲細鍒幫紝榪欎釜CTest鐨勫ご鏂囦歡閲宨nclude浜嗗緢灝戠殑澶達紝浠栧彲浠ヨ瀹屾垚浜嗗師濮嬬殑浣垮懡錛岃揪鍒頒簡鍔熻兘鎬ф帴鍙g殑浣滅敤錛岃屽叾浠栧師鏉ュ畾涔夊湪澶撮噷鐨?h,鍙互鍏ㄩ儴鎸埌cpp閲屼簡銆備笅闈㈡潵鍒嗘瀽涓媗oki鏄庝箞瀹炵幇鐨勩傚彲浠ョ湅鍒板疄鐜皃impl棣栧厛闇瑕佺壍緗0鏄巔re define綾伙紝loki閫氳繃妯℃澘鐨勫叏鐗瑰寲鏉ュ疄鐜頒簡榪欎釜鐨勯殣钘忥紝浠庤岄伩鍏嶄簡鎶婂叿浣撶殑瀹炵幇綾繪毚闇茬粰client鐨勫紛绔備笅闈㈡潵鐪嬩笅榪欎釜娉涘寲鐨刾re define: template struct ImplT; 鍝堝搱錛屽緢綆鍗曪紝鍐嶇湅涓婇潰鎴戠殑cpp閲岀殑瀹氫箟錛屽ぇ瀹剁粨鍚堜笂闈篃璁稿氨鏄庣櫧浜嗗惂錛岄儴榪囷紝榪欓噷闇瑕佹敞鎰忕殑鏄紝CTest鐨勬瀯閫犲嚱鏁拌鍐欏悗闈紝涓嶇劧can;t compile. 浣嗘槸錛屼負浠涔堝叿浣撶殑瀹炵幇綾繪槸ImplT浣嗭紝鍓嶉潰鐨?br /><font color="#0000ff">Loki::PimplT::Type m_impl</font>;<br />閭oki::PimplT::Type鏄粈涔堢敤鐨勶紝鎴戜滑鐭ラ亾錛屽亣濡備繚瀛樺師濮嬬殑<br /><font color="#0000ff">Loki::ImplT<CTest>* m_impl;</font><br />鐒跺悗new涓涓?鍏跺疄榪欐牱鍙瓨鍦?涓棶棰橈紝2涓笉鏂逛究錛?br />1錛氶棶棰樻槸榪欐牱鐨勫師濮嬫寚閽堬紝涓嶈兘浼犳挱const淇℃伅錛屼篃灝辨槸璇達紝瀵硅薄CTest杞負const鐨勫寲錛屼粬閲岄潰鐨勬寚閽堢被鍨嬩笉鏄悓鏍烽殢鐫甯︽湁const灞炴э紝涔熷氨鏄錛屽亣濡傛鏃舵寚閽堟寚鍚戠殑瀵硅薄鏈変釜鍑芥暟錛屾彁渚涗簡const錛唍one const鐨勶紝姝ゆ椂錛岃繕鏄細璋冪敤non const鐨勶紝鎵浠ワ紝澶栫晫榪樻槸鍙互閫氳繃榪欎釜瀵硅薄鏉ュ仛淇敼銆?br />2錛?涓笉鏂逛究鏄紝浣犲繀欏誨瀵硅薄瀹炵幇new鍜宒elete.<br />涓嬮潰鏉ョ湅涓媗oki鏄庝箞鍋氱殑<br /><font color="#0000ff">template<class T><br />struct ConstPropPtr<br />{<br />聽聽聽聽聽聽聽 explicit ConstPropPtr(T* p) : ptr_(p) {}<br />聽聽聽聽聽聽聽 ~ConstPropPtr() { delete聽 ptr_; ptr_ = 0; }<br />聽聽聽聽聽聽聽 T* operator->()聽聽聽 { return聽 ptr_; }<br />聽聽聽聽聽聽聽 T& operator*()聽聽聽 { return *ptr_; }<br />聽聽聽聽聽聽聽 const T* operator->() const聽聽聽 { return聽 ptr_; }<br />聽聽聽聽聽聽聽 const T& operator*()聽 const聽聽聽 { return *ptr_; }<br />聽聽聽<br />private:<br />聽聽聽聽聽聽聽 ConstPropPtr();<br />聽聽聽聽聽聽聽 ConstPropPtr(const ConstPropPtr&);<br />聽聽聽聽聽聽聽 ConstPropPtr& operator=(const ConstPropPtr&);<br />聽聽聽聽聽聽聽 T* ptr_;<br />};</font></p> <p> <font color="#000000">榪欎釜綾繪彁渚涗簡瀵歸棶棰?鐨勮В鍐熾備笅闈細璁茶В錛屼富瑕佺殑鐐規槸錛屽璞′笉鍚屼簬鎸囬拡錛屽璞¤兘浼犻抍onst灞炴с?br />涓嬮潰鐪嬩笅pimlT鐨勫畾涔夛細<br /></font> <font color="#0000ff">template<class T, template<class> class Ptr = ConstPropPtr><br />struct PimplT<br />{<br />聽聽聽聽聽聽聽 typedef T Impl;</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 // declare pimpl<br />聽聽聽聽聽聽聽 typedef Pimpl<ImplT<T>, Ptr<ImplT<T> > > Type;</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 // inherit pimpl<br />聽聽聽聽聽聽聽 typedef PimplOwner<ImplT<T>, Ptr<ImplT<T> > > Owner;<br />};<br /><font color="#000000">鍙互鐪嬪埌瀵?/font>Type</font> <font color="#000000">鐨勫畾涔夛紝涓嬮潰鐨刼wner涔熶笉璇翠簡錛岀洿鎺ュ埌Pimpl,</font> </p> <p> <font color="#0000ff">template<br /><聽聽聽<br />聽聽聽聽聽聽聽 class T,<br />聽聽聽聽聽聽聽 typename Pointer = ConstPropPtr<T><br />><br />class Pimpl<br />{<br />public:</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 typedef T Impl;</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 Pimpl() : ptr_(new T)<br />聽聽聽聽聽聽聽 {}</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 ~Pimpl()<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 typedef char T_must_be_defined[sizeof(T) ? 1 : -1 ];<br />聽聽聽聽聽聽聽 }</font> </p> <p> <br /> <font color="#0000ff">聽聽聽聽聽聽聽 T* operator->()<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 return ptr_.operator->();<br />聽聽聽聽聽聽聽 }</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 T& operator*()<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 return ptr_.operator*();<br />聽聽聽聽聽聽聽 }</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 const T* operator->() const<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 return ptr_.operator->();<br />聽聽聽聽聽聽聽 }</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 const T& operator*() const<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 return ptr_.operator*();<br />聽聽聽聽聽聽聽 }</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 Pointer& wrapped()<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 return ptr_;<br />聽聽聽聽聽聽聽 }</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 const Pointer& wrapped() const<br />聽聽聽聽聽聽聽 {<br />聽聽聽聽聽聽聽聽聽聽聽 return ptr_;<br />聽聽聽聽聽聽聽 }</font> </p> <p> <br /> <font color="#0000ff">private:<br />聽聽聽聽聽聽聽 Pimpl(const Pimpl&);<br />聽聽聽聽聽聽聽 Pimpl& operator=(const Pimpl&);</font> </p> <p> <font color="#0000ff">聽聽聽聽聽聽聽 Pointer ptr_;<br />};</font> </p> <div>鍙互鐪嬪埌錛岃繖涓被鐢ㄤ簡涓婇潰鐨?font color="#0000ff">ConstPropPtr</font><font color="#000000">浠庤屼嬌瀵硅薄鏈変簡const灞炴х殑浼犻掋傚叾浠栫殑錛屽疄闄呬笂錛屽府浣犳搷浣滀簡new,鍐?/font><font color="#0000ff">ConstPropPtr</font><font color="#000000">閲岄噴鏀撅紝鏈夌偣RAII鐨勫懗閬擄紝鍓╀笅鐨勫畬鍏ㄦā鎷熶繚瀛樼殑鎸囬拡鐨勮涓猴紝鍗砳mplT鐨勫疄鐜幫紝浠庤屼嬌鍏惰兘姝g‘鐨勬搷浣滃璞°?/font></div> <div> <img src="http://blog.sina.com.cn/images/face/022.gif" />鐫℃浜嗭紝鏃╂棭緇撴潫</div> <div>聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 alex_yuu</div> <img src ="http://m.shnenglu.com/agerlis/aggbug/18644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/agerlis/" target="_blank">agerlis</a> 2007-02-11 15:52 <a href="http://m.shnenglu.com/agerlis/archive/2007/02/11/18644.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>絎?嬈℃潵錛屽彂絎?浠借創錛屾垜鍙玜lex,鏄垰姣曚笟鐨勮彍鑿滈笩錛屽ぇ瀹惰澶氬叧鐓?/title><link>http://m.shnenglu.com/agerlis/archive/2007/02/11/18635.html</link><dc:creator>agerlis</dc:creator><author>agerlis</author><pubDate>Sun, 11 Feb 2007 07:32:00 GMT</pubDate><guid>http://m.shnenglu.com/agerlis/archive/2007/02/11/18635.html</guid><wfw:comment>http://m.shnenglu.com/agerlis/comments/18635.html</wfw:comment><comments>http://m.shnenglu.com/agerlis/archive/2007/02/11/18635.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.shnenglu.com/agerlis/comments/commentRss/18635.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/agerlis/services/trackbacks/18635.html</trackback:ping><description><![CDATA[鎴戠殑msn:agerlis@163.com<br />鎴戠殑email:agerlis@163.com<br />鎴戠殑qq:350457656<img src ="http://m.shnenglu.com/agerlis/aggbug/18635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/agerlis/" target="_blank">agerlis</a> 2007-02-11 15:32 <a href="http://m.shnenglu.com/agerlis/archive/2007/02/11/18635.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://wogoyao.com" target="_blank">亚洲人久久久</a>| <a href="http://dayomall.com" target="_blank">毛片一区二区</a>| <a href="http://096577.com" target="_blank">久久久久久夜</a>| <a href="http://fdgkinetic.com" target="_blank">免费在线看一区</a>| <a href="http://www-42189.com" target="_blank">久久精品中文字幕一区</a>| <a href="http://www77vcd.com" target="_blank">国精品一区二区三区</a>| <a href="http://www-87633.com" target="_blank">欧美精品一区二区三区一线天视频 </a>| <a href="http://wwwyinyinai149.com" target="_blank">欧美日韩不卡在线</a>| <a href="http://yunduaner.com" target="_blank">aa级大片欧美三级</a>| <a href="http://www47011.com" target="_blank">亚洲国产精品尤物yw在线观看</a>| <a href="http://sishengnv.com" target="_blank">亚洲一区二区不卡免费</a>| <a href="http://spardec.com" target="_blank">亚洲国产精品黑人久久久</a>| <a href="http://17kfe.com" target="_blank">国产亚洲欧洲997久久综合</a>| <a href="http://www107aa.com" target="_blank">欧美在线观看天堂一区二区三区</a>| <a href="http://613609.com" target="_blank">亚洲国产精品尤物yw在线观看</a>| <a href="http://by99969.com" target="_blank">欧美午夜a级限制福利片</a>| <a href="http://hakuihoso.com" target="_blank">欧美日韩亚洲成人</a>| <a href="http://shiyoudiban.com" target="_blank">欧美69视频</a>| <a href="http://www-74987.com" target="_blank">欧美久久久久久久久久</a>| <a href="http://6688se.com" target="_blank">国产精品家庭影院</a>| <a href="http://5110010.com" target="_blank">亚洲国内自拍</a>| <a href="http://daqinhkvip.com" target="_blank">日韩一级不卡</a>| <a href="http://w7727.com" target="_blank">亚洲一区二区三区在线</a>| <a href="http://teqmeta.com" target="_blank">亚洲午夜一区</a>| <a href="http://www47755.com" target="_blank">美女露胸一区二区三区</a>| <a href="http://pear9.com" target="_blank">亚洲国产欧美久久</a>| <a href="http://dsbangx.com" target="_blank">亚洲综合电影</a>| <a href="http://xmt86.com" target="_blank">欧美视频在线播放</a>| <a href="http://v58q.com" target="_blank">亚洲国产经典视频</a>| <a href="http://nztd20.com" target="_blank">亚洲欧美成人一区二区在线电影</a>| <a href="http://wansilv.com" target="_blank">亚洲乱码国产乱码精品精</a>| <a href="http://sortxz.com" target="_blank">在线午夜精品自拍</a>| <a href="http://173168.com" target="_blank">久久精品国产99国产精品澳门</a>| <a href="http://567acg.com" target="_blank">老司机精品久久</a>| <a href="http://tcgo903.com" target="_blank">一区二区三区欧美日韩</a>| <a href="http://0855d.com" target="_blank">久久久久欧美</a>| <a href="http://cao3636.com" target="_blank">国产毛片一区</a>| <a href="http://shanghaijiagu.com" target="_blank">正在播放亚洲</a>| <a href="http://778877k.com" target="_blank">亚洲国产免费看</a>| <a href="http://yp889.com" target="_blank">久久精品男女</a>| <a href="http://www-65581.com" target="_blank">国产一区 二区 三区一级</a>| <a href="http://333666333.com" target="_blank">一本色道久久综合亚洲精品高清 </a>| <a href="http://www-188445.com" target="_blank">亚洲一区二区三区精品视频</a>| <a href="http://kgg93.com" target="_blank">久久青青草原一区二区</a>| <a href="http://18av18.com" target="_blank">亚洲美女黄色片</a>| <a href="http://hhh699.com" target="_blank">免费日韩av</a>| <a href="http://9911444.com" target="_blank">国产一区二区精品在线观看</a>| <a href="http://13789a.com" target="_blank">国产精品99久久99久久久二8</a>| <a href="http://airsixth.com" target="_blank">美女精品网站</a>| <a href="http://nnnn34.com" target="_blank">久久影音先锋</a>| <a href="http://goldteddy.com" target="_blank">在线精品观看</a>| <a href="http://jiuzuifusheng.com" target="_blank">欧美激情亚洲</a>| <a href="http://gyzhoucheng.com" target="_blank">欧美性猛交一区二区三区精品</a>| <a href="http://www497171c.com" target="_blank">日韩一级黄色av</a>| <a href="http://8090567.com" target="_blank">夜夜嗨av色综合久久久综合网</a>| <a href="http://www-137999.com" target="_blank">欧美国产欧美综合</a>| <a href="http://99cheats.com" target="_blank">亚洲图中文字幕</a>| <a href="http://emu160.com" target="_blank">亚洲欧美另类中文字幕</a>| <a href="http://mascorcg.com" target="_blank">一区二区三区在线视频观看</a>| <a href="http://www-49386.com" target="_blank">久久久久一区二区三区</a>| <a href="http://628155.com" target="_blank">老色鬼精品视频在线观看播放</a>| <a href="http://133969.com" target="_blank">亚洲国产精品毛片</a>| <a href="http://wwwhhh396.com" target="_blank">亚洲美女中文字幕</a>| <a href="http://nachang5117.com" target="_blank">国产精品网站在线</a>| <a href="http://jiazhuangma.com" target="_blank">免费亚洲一区二区</a>| <a href="http://www-55655.com" target="_blank">欧美日韩亚洲综合</a>| <a href="http://78757a.com" target="_blank">鲁鲁狠狠狠7777一区二区</a>| <a href="http://mmmm26.com" target="_blank">老鸭窝亚洲一区二区三区</a>| <a href="http://shenduzhongcao.com" target="_blank">9国产精品视频</a>| <a href="http://sclddn.com" target="_blank">欧美在线视频网站</a>| <a href="http://7776701.com" target="_blank">午夜伦理片一区</a>| <a href="http://xshgwy.com" target="_blank">久久人人超碰</a>| <a href="http://7115866.com" target="_blank">久久精品国产综合</a>| <a href="http://6661639.com" target="_blank">欧美日韩亚洲一区二区</a>| <a href="http://zyjxyx.com" target="_blank">蜜桃av噜噜一区</a>| <a href="http://xzvaz.com" target="_blank">国产日韩欧美中文</a>| <a href="http://devwang.com" target="_blank">最新热久久免费视频</a>| <a href="http://baoyu1313.com" target="_blank">国产精品久久久久影院亚瑟 </a>| <a href="http://www-00468.com" target="_blank">亚洲欧美美女</a>| <a href="http://tigerpowerinc.com" target="_blank">亚洲一区综合</a>| <a href="http://7777525.com" target="_blank">亚洲一区二区三区三</a>| <a href="http://353033.com" target="_blank">欧美母乳在线</a>| <a href="http://gaysexcube.com" target="_blank">亚洲国产成人av好男人在线观看</a>| <a href="http://9952222.com" target="_blank">国产美女精品视频</a>| <a href="http://srojsy.com" target="_blank">性欧美在线看片a免费观看</a>| <a href="http://wanyoulipin.com" target="_blank">一区二区三区四区五区在线</a>| <a href="http://9e67.com" target="_blank">久久久久久一区二区</a>| <a href="http://4466777.com" target="_blank">久久免费99精品久久久久久</a>| <a href="http://739191g.com" target="_blank">国产精品一区二区久久精品</a>| <a href="http://kanebocos.com" target="_blank">日韩一级片网址</a>| <a href="http://hazymall.com" target="_blank">午夜在线一区</a>| <a href="http://yw9677.com" target="_blank">国产婷婷精品</a>| <a href="http://wce-expo.com" target="_blank">久久婷婷久久一区二区三区</a>| <a href="http://www930666.com" target="_blank">亚洲二区精品</a>| <a href="http://am3757.com" target="_blank">校园激情久久</a>| <a href="http://868482.com" target="_blank">亚洲国产小视频</a>| <a href="http://xiaocao-av.com" target="_blank">欧美日韩在线免费视频</a>| <a href="http://niceboybao.com" target="_blank">在线视频日韩精品</a>| <a href="http://www218999.com" target="_blank">欧美在线视频不卡</a>| <a href="http://www901aaa.com" target="_blank">在线欧美亚洲</a>| <a href="http://fuqiba.com" target="_blank">国产日韩欧美日韩</a>| <a href="http://by99969.com" target="_blank">欧美专区在线观看</a>| <a href="http://5e5b7g.com" target="_blank">欧美激情综合色综合啪啪 </a>| <a href="http://03qt.com" target="_blank">亚洲欧美国产高清</a>| <a href="http://55555549.com" target="_blank">久久综合网hezyo</a>| <a href="http://cancerrxa.com" target="_blank">亚洲二区在线</a>| <a href="http://www94816.com" target="_blank">国产精品成人一区二区艾草</a>| <a href="http://340996.com" target="_blank">午夜精品一区二区在线观看</a>| <a href="http://7sscc.com" target="_blank">免费中文字幕日韩欧美</a>| <a href="http://5xxm.com" target="_blank">亚洲人成网站999久久久综合</a>| <a href="http://8xfore.com" target="_blank">一区二区三区四区五区精品视频</a>| <a href="http://8xv0.com" target="_blank">国产一区二区三区精品欧美日韩一区二区三区 </a>| <a href="http://hengbang50.com" target="_blank">欧美一区二区三区在线观看</a>| <a href="http://wocao1997.com" target="_blank">亚洲国产毛片完整版 </a>| <a href="http://mide776.com" target="_blank">9色精品在线</a>| <a href="http://4448884.com" target="_blank">亚洲国产欧美在线人成</a>| <a href="http://4466777.com" target="_blank">亚洲风情亚aⅴ在线发布</a>| <a href="http://sqms2013.com" target="_blank">一区二区三区在线视频播放</a>| <a href="http://jiejiesao8.com" target="_blank">国产精品久久久一区麻豆最新章节 </a>| <a href="http://3333347.com" target="_blank">国产精品久久777777毛茸茸</a>| <a href="http://1390555.com" target="_blank">欧美激情一区二区三区成人</a>| <a href="http://gx2020.com" target="_blank">女生裸体视频一区二区三区</a>| <a href="http://mom8888.com" target="_blank">亚洲一区二区av电影</a>| <a href="http://www5xzz1.com" target="_blank">欧美国产视频在线观看</a>| <a href="http://psykoptic.com" target="_blank">你懂的国产精品</a>| <a href="http://www47777.com" target="_blank">亚洲精品久久久久久久久</a>| <a href="http://807225.com" target="_blank">亚洲免费成人av</a>| <a href="http://10669p.com" target="_blank">亚洲一区二区在线免费观看</a>| <a href="http://y66776.com" target="_blank">亚洲免费在线观看视频</a>| <a href="http://301110.com" target="_blank">久久久欧美精品sm网站</a>| <a href="http://www789yys.com" target="_blank">久久午夜精品</a>| <a href="http://402626com.com" target="_blank">欧美日本在线视频</a>| <a href="http://787299.com" target="_blank">国产一区二区观看</a>| <a href="http://8880850.com" target="_blank">一区二区三区三区在线</a>| <a href="http://wzsl8.com" target="_blank">蜜桃av一区二区在线观看</a>| <a href="http://hsxinbao.com" target="_blank">亚洲国内自拍</a>| <a href="http://bbbbyb.com" target="_blank">女人天堂亚洲aⅴ在线观看</a>| <a href="http://s0247.com" target="_blank">亚洲人久久久</a>| <a href="http://dmzjz.com" target="_blank">亚洲国产另类久久精品</a>| <a href="http://wwwavtb2049.com" target="_blank">亚洲综合色噜噜狠狠</a>| <a href="http://yw6632.com" target="_blank">久久国产一区</a>| <a href="http://4466o.com" target="_blank">亚洲精品影视在线观看</a>| <a href="http://9927tv.com" target="_blank">性亚洲最疯狂xxxx高清</a>| <a href="http://770456.com" target="_blank">巨胸喷奶水www久久久免费动漫</a>| <a href="http://www901aaa.com" target="_blank">蜜臀久久久99精品久久久久久</a>| <a href="http://avtt0.com" target="_blank">亚洲视频欧美在线</a>| <a href="http://689658.com" target="_blank">欧美视频一区二区三区</a>| <a href="http://avsemm.com" target="_blank">一本色道久久88综合日韩精品</a>| <a href="http://36seaa.com" target="_blank">猛干欧美女孩</a>| <a href="http://submro.com" target="_blank">久久久久久噜噜噜久久久精品</a>| <a href="http://sishengnv.com" target="_blank">国产日韩成人精品</a>| <a href="http://216667.com" target="_blank">亚洲视频精选在线</a>| <a href="http://wwzz3.com" target="_blank">欧美1区2区</a>| <a href="http://8xyxs1.com" target="_blank">欧美视频在线观看一区</a>| <a href="http://smdzs.com" target="_blank">久久精品中文字幕免费mv</a>| <a href="http://ww3838.com" target="_blank">欧美日本韩国</a>| <a href="http://kk553.com" target="_blank">欧美中文在线观看国产</a>| <a href="http://340332.com" target="_blank">亚洲三级国产</a>| <a href="http://miya2223.com" target="_blank">久久国内精品视频</a>| <a href="http://qcjpns.com" target="_blank">黄色成人在线网址</a>| <a href="http://pp88qq.com" target="_blank">亚洲摸下面视频</a>| <a href="http://wwwzmcc1.com" target="_blank">亚洲国产日韩欧美综合久久 </a>| <a href="http://stt788.com" target="_blank">亚洲黄色免费网站</a>| <a href="http://ycgg008.com" target="_blank">亚洲六月丁香色婷婷综合久久</a>| <a href="http://szbeikai.com" target="_blank">欧美成人激情视频</a>| <a href="http://iacapmm.com" target="_blank">亚洲欧洲精品一区二区精品久久久 </a>| <a href="http://j88866.com" target="_blank">久久亚洲高清</a>| <a href="http://www353488.com" target="_blank">亚洲日本久久</a>| <a href="http://haomscq.com" target="_blank">国产精品久久久久婷婷</a>| <a href="http://m72722.com" target="_blank">久久久久久国产精品一区</a>| <a href="http://mmmm43.com" target="_blank">欧美激情视频一区二区三区在线播放 </a>| <a href="http://7v51.com" target="_blank">亚洲免费视频成人</a>| <a href="http://nbpacking.com" target="_blank">好吊色欧美一区二区三区四区</a>| <a href="http://www151zh.com" target="_blank">久久综合九色综合欧美狠狠</a>| <a href="http://www-4157.com" target="_blank">最新热久久免费视频</a>| <a href="http://857sds.com" target="_blank">久久精品九九</a>| <a href="http://cnc800.com" target="_blank">一区二区免费在线观看</a>| <a href="http://samucorvin.com" target="_blank">国产亚洲精品aa午夜观看</a>| <a href="http://taoh228.com" target="_blank">免费日本视频一区</a>| <a href="http://cm168168.com" target="_blank">亚洲欧美在线x视频</a>| <a href="http://8111357.com" target="_blank">亚洲高清久久久</a>| <a href="http://777777hb.com" target="_blank">欧美一区二区视频网站</a>| <a href="http://www11111111.com" target="_blank">91久久综合</a>| <a href="http://www672hh.com" target="_blank">韩日视频一区</a>| <a href="http://66688811.com" target="_blank">欧美视频精品一区</a>| <a href="http://fs-nanxiang.com" target="_blank">狼人天天伊人久久</a>| <a href="http://zzmzit.com" target="_blank">午夜性色一区二区三区免费视频</a>| <a href="http://52sougou.com" target="_blank">欧美成人69av</a>| <a href="http://stt788.com" target="_blank">久久精品男女</a>| <a href="http://ylsnuha.com" target="_blank">亚洲伊人一本大道中文字幕</a>| <a href="http://bauyu121.com" target="_blank">亚洲国产成人tv</a>| <a href="http://246767.com" target="_blank">国产午夜一区二区三区</a>| <a href="http://www11111111.com" target="_blank">欧美国产综合</a>| <a href="http://5555547.com" target="_blank">欧美影院午夜播放</a>| <a href="http://88xjj.com" target="_blank">亚洲免费av网站</a>| <a href="http://caoxiu33.com" target="_blank">有码中文亚洲精品</a>| <a href="http://sauske.com" target="_blank">国产欧美日韩精品专区</a>| <a href="http://www-3121.com" target="_blank">欧美日韩一区自拍</a>| <a href="http://www13256.com" target="_blank">欧美高清自拍一区</a>| <a href="http://xxx6688.com" target="_blank">久久久久久综合</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>