锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久婷婷五月综合色高清,久久精品亚洲一区二区三区浴池,狠狠精品久久久无码中文字幕 http://m.shnenglu.com/beautykingdom/category/7618.htmlzh-cnSat, 07 Feb 2009 18:27:27 GMTSat, 07 Feb 2009 18:27:27 GMT60鍦╔P涓嬬敤vc6璋冭瘯ISAPI Project<杞澆鍔犳敼鍐?gt;http://m.shnenglu.com/beautykingdom/archive/2008/07/19/56620.htmlchatlerchatlerSat, 19 Jul 2008 10:24:00 GMThttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56620.htmlhttp://m.shnenglu.com/beautykingdom/comments/56620.htmlhttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56620.html#Feedback0http://m.shnenglu.com/beautykingdom/comments/commentRss/56620.htmlhttp://m.shnenglu.com/beautykingdom/services/trackbacks/56620.html鍏充簬ISAPI璋冭瘯鐨勬枃绔狅紝緗戜笂宸茬粡鏈夊緢澶氥備粖澶╀箣鎵浠ヨ繕瑕佸啓榪欑瘒鏂囩珷錛屽師鍥犳湁涓夛細涓鏄綉涓婂叧浜庤皟璇? ISAPI鐨勬柟娉曞ぇ澶氭暟閮芥槸鍦╓in2K錛涗簩鏄綉涓婄殑渚嬪瓙铏界劧澶氾紝澶ч儴鍒嗛兘鏄漿杞斤紝澶ч儴鍒嗕綔鑰呰嚜宸變粠鏈翰鑷瘯榪囷紝灝辯洿鎺ユ妸鍒漢鐨勪笢瑗跨矘璐磋繃鏉ワ紝寰寰褰卞搷浜? 緗戜笂鎼滅儲鍙堣瀵間簡鍏朵粬瀵繪壘絳旀鐨勪漢錛涗笁鏄綉涓婄殑渚嬪瓙鏈変簺騫朵笉璇︾粏錛屾湁浜涗篃涓嶆紜紝榪欐牱涓嶄絾涓嶈兘甯姪瑙e喅闂錛岃繕瀹規槗鎶婁漢甯﹀叆姝ч斻?br> 
  
 
    浠婂ぉ寰椾簡涓鐐圭┖闂詫紝鍦ㄨ繖閲岃緇嗗啓涓婭SAPI鍦╔p鐜涓嬬殑璋冭瘯鏂規硶錛屽笇鏈涘垵嬈℃帴瑙﹀埌ISAPI鐨勭▼搴忓憳浠皯涓浜涢儊闂楓?br> 
    棣栧厛鎴戠殑鎿嶄綔緋葷粺鐜鏄疢icrosoft Windows Xp Professional銆傛垜鐨勭紪璇戠幆澧冩槸Virsual C++6.0銆俈C鐨勮ˉ涓佷富瑕佹湁SP6銆?br> 
鎺ヤ笅鏉ユ寜鐓т笅闈㈢殑姝ラ錛?br>1銆両IS鐨勭洰褰曪紙鏍圭洰褰曘佽櫄鎷熺洰褰曪級榪愯綰у埆鏀逛負浣庯紙榛樿涓轟腑錛?br>鎺у埗闈㈡澘->綆$悊宸ュ叿->Internet淇℃伅鏈嶅姟銆傚湪榛樿绔欑偣涓婂崟鍑誨彸閿?>灞炴?>涓葷洰褰曪紙鏍囩錛?>搴旂敤紼嬪簭淇濇姢(N)錛屽皢涓?鍏辯敤)鏀逛負浣?IIS榪涚▼)銆傛墽琛屾潈闄愭敼涓?#8220;鏁欐湰鍜屽彲鎵ц鏂囦歡”銆?br>鐢ㄥ悓鏍風殑鏂規硶淇敼浣犳柊寤虹殑铏氭嫙鐩綍鐨勮繍琛岀駭鍒?br> 
2銆佷慨鏀規湰鍦板畨鍏ㄧ瓥鐣ュ睘鎬?br>鎺у埗闈㈡澘->綆$悊宸ュ叿->鏈湴瀹夊叏絳栫暐->鏈湴絳栫暐->鐢ㄦ埛鏉冨埄鎸囨淳銆?br>a銆? 鎵懼埌“浠ユ搷浣滅郴緇熸柟寮忔搷浣?#8221;錛屽弻鍑繪垨鑰呭彸閿夊睘鎬э紝寮瑰嚭瀵硅瘽妗嗗悗錛岀偣“娣誨姞鐢ㄦ埛鎴栫粍”鎸夐挳錛屽湪杈撳叆鏂囧瓧鍖哄煙涓緭鍏ョ鐞嗗憳甯愭埛錛堝張縐頒腑瓚呯駭鐢ㄦ埛錛夛紝“媯鏌ュ悕 縐?#8221;錛?#8220;紜畾”娣誨姞銆傛瘮濡傛垜鐜板湪鐧婚檰鐨勫笎鍙鋒槸Guyue錛?#8220;媯鏌ュ笎鍙?#8221;涔嬪悗灝卞嚭鐜癆7B4931A85554A0\Guyue錛? A7B4931A85554A0鏄垜鐨勮綆楁満鍚嶇О錛孏uyue鏄綋鍓嶇櫥闄嗗笎鎴鳳紝鏄櫎Administrator涔嬪鐨勬垜鐨勭鐞嗗憳甯愭埛銆?#8220;紜畾”娣誨姞銆?br>b銆佹壘鍒?#8220;鍏佽璁$畻鏈哄拰鐢ㄦ埛甯愭埛琚俊浠諱互渚夸簬濮旀墭”錛岀収a鐨勬柟娉曟坊鍔犵鐞嗗憳甯愭埛銆?br>娉細榪欓噷鎴戞病鏈夊姞鐢ㄦ埛錛岀洿鎺ョ敤鐨勭鐞嗗憳鐢ㄦ埛銆?br> 
3銆佹墦寮VC6.0錛屼笉闇瑕佹墦寮浠諱綍宸ョ▼銆?br>鑿滃崟鏍廩Build]->[Start Debug]->Attach To Process
鍕鵑?#8220;Show System Process”錛屾壘鍒癷netinfo,鎸塐K閿坊鍔犲埌璇ヨ繘紼嬨?br>鍦ㄨ彍鍗曟爮[Project]->[Settings]鎴栬呯洿鎺ユ寜蹇嵎閿瓵lt+F7銆?br>浼? 鐪嬪埌涓涓狦eneral鍜屼竴涓狣ebug鏍囩錛岄夋嫨Debug鏍囩銆侰ategory涓嬫媺鍒椾腑鏈変袱涓夐」錛孏eneral鍜孉dditional DLLs錛岄夋嫨Additional DLLs銆傚湪Modules涓姞鍏ヤ綘瑕佽皟璇曠殑DLL錛屽嬀閫塗ry to locate others DLLs錛屾寜OK紜畾淇濆瓨銆?br>
4銆佹墦寮浣犵殑ISAPI宸ョ▼涓殑涓涓狢PP鏂囦歡錛岀湅鑳戒笉鑳借緗柇鐐癸紝濡傛灉涓嶈兘錛屾寜shift+F5閿鍑鴻皟璇曠姸鎬併傝繘 鍏ヤ笅涓姝ャ傚鏋滈鍑轟箣鍚庣戶緇璠Build]->[Start Debug]->Attach To Process錛岃繖涓椂鍊欎細鎻愮ず錛岃宸ョ▼涓嶅寘鍚換浣曡皟璇曚俊鎭傚鏋滆兘璁劇疆鏂偣錛屽垯鐩存帴榪涘叆絎叚姝ャ?br>娉細榪欎竴姝ユ病鏈夋垚鍔燂紝鏃犳硶attach to process錛岀偣浜嗘寜閽互鍚巔rocess list榪樻槸絀虹殑銆傛垜鏄敤
msdev -p <process ID>鐢熸垚鐨勪竴涓猇C6鐜錛屽湪榪愯IE鍚庝細鍦ㄥ紓甯告姏鍑轟綅緗仠姝€?br> 
5銆佹墦寮浣犵殑ISAPI宸ョ▼涓紝紜畾浣犵殑緙栬瘧鐘舵佷負Debug鐘舵侊紝紜畾浣燣ink錛堣緭鍑猴級鐨凞LL鍜屼綘鍦ㄧ涓夋Modules涓繚瀛樼殑DLL涓哄悓涓涓枃浠躲俁ebuild涓涓嬨?br> 
6銆佽彍鍗曟爮[Build]->[Start Debug]->Attach To Process
鍕? 閫?#8220;Show System Process”錛屾壘鍒癷netinfo,鎸塐K閿檮鍔犲埌inetinfo榪涚▼銆傛墦寮ISAPI宸ョ▼涓殑涓涓狢PP鏂囦歡錛屾渶濂芥槸紼嬪簭鐨勫叆鍙f枃浠訛紝鍦ㄧ▼搴忕殑 鍏ュ彛澶勮緗柇鐐癸紝姣斿鎴戣緗殑灝辨槸CIsapiWtExtension::InitInstance(...)鍜孌WORD CIsapiWtExtension::HttpExtensionProc(...)紼嬪簭涓鏃﹀紑濮嬭繍琛岋紝椹笂灝卞彲浠ュ湪榪欓噷鎴幏銆?br>娉細鏃㈢劧姝ラ4閲岀湅涓嶅埌process list錛屾柇鐐硅緗嚜鐒朵篃灝變笉綆$敤浜嗐?
 
7銆佹墦寮IE錛屾墦寮浣犺皟鐢ㄨDLL鐨勭珯鐐癸紝鍙戝嚭IE璇鋒眰錛孷C搴旇灝變細鍦ㄤ綘璁劇疆鏂偣鐨勫湴鏂規嫤鎴埌榪欎釜璇鋒眰瀵瑰綋鍓岲LL鐨勬搷浣滀簡銆?/font>
娉細姝e鎴戝湪姝ラ4涓鍒扮殑閭f牱錛岀▼搴忓湪寮傚父浣嶇疆浼氬仠浣忥紝鍙互鐪嬪埌鍑芥暟鐨勮皟鐢ㄩ『搴忥紱鍐嶅氨鏄湁涓皬trick錛屽彲浠ュ姞涓狝SSERT鍦ㄥ紓甯擱檮榪戜綅緗紝榪欐牱紼嬪簭灝卞彲浠ュ仠姝㈠湪閭e効錛岃繖鏍蜂篃灝卞彲浠ヤ嬌鐢ㄦ柇鐐逛簡銆?



chatler 2008-07-19 18:24 鍙戣〃璇勮
]]>
浠跨湡VC++鎻愪緵鐨勫叧閿瓧__uuidof<杞?gt;http://m.shnenglu.com/beautykingdom/archive/2008/07/19/56604.htmlchatlerchatlerSat, 19 Jul 2008 08:01:00 GMThttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56604.htmlhttp://m.shnenglu.com/beautykingdom/comments/56604.htmlhttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56604.html#Feedback0http://m.shnenglu.com/beautykingdom/comments/commentRss/56604.htmlhttp://m.shnenglu.com/beautykingdom/services/trackbacks/56604.html
    class __declspec(uuid("B372C9F6-1959-4650-960D-73F20CD479BA")) Class;   
struct __declspec(uuid("B372C9F6-1959-4650-960D-73F20CD479BB")) Interface;

void test()
{
CLSID clsid=__uuidof(Class);
IID iid=__uuidof(Interface);
...
}


銆銆榪欐瘮璧蜂綘浠ュ墠瀹氫箟uuid鐨勬柟娉曠畝鍗曞浜嗗惂錛熷彲鎯滐紝榪欐牱濂界敤鐨勪笢瑗匡紝瀹冨彧鍦╒C++涓彁渚涖備笉榪囨病鏈夊叧緋伙紝鎴戜滑榪欓噷浠嬬粛涓涓妧宸э紝鍙互 璁╀綘鍦ㄥ嚑涔庢墍鏈塁++緙栬瘧鍣ㄤ腑閮藉彲浠ヨ繖鏍鋒柟渚跨殑浣跨敤__uuidof銆傝繖閲屾病鏈夎鏄墍鏈夛紝鏄洜涓烘垜浠嬌鐢ㄤ簡妯℃澘鐗瑰寲鎶鏈紝鍙兘瀛樺湪涓浜涙瘮杈?#8220;鍙よ?#8221;鐨? C++緙栬瘧鍣紝涓嶆敮鎸佽鐗規с?

銆銆涔熻浣犲凡緇忚揩涓嶅強寰呬簡銆傚ソ錛岃鎴戜滑鏉ョ湅鐪嬶細

    #include <string>   
#include <cassert>

inline STDMETHODIMP_(GUID) GUIDFromString(LPOLESTR lpsz)
{
HRESULT hr;
GUID guid;
if (lpsz[0]=='{')
{
hr=CLSIDFromString(lpsz,&guid);
}
else
{
std::basic_string<OLECHAR> strGuid;
strGuid.append(1,'{');
strGuid.append(lpsz);
strGuid.append(1,'}');
hr = CLSIDFromString((LPOLESTR)strGuid.c_str(),&guid);
}
assert(hr==S_OK);
return guid;
}

template <class Class>
struct _UuidTraits {
};

#define _DEFINE_UUID(Class,uuid) \
template <> \
struct _UuidTraits<Class>{ \
static const GUID& Guid(){ \
static GUID guid=GUIDFromString(L## uuid); \
return guid; \
} \
}

#define __uuidof(Class) _UuidTraits<Class>::Guid()

#define DEFINE_CLSID(Class,guid) \
class Class; \
_DEFINE_UUID(Class,guid)

#define DEFINE_IID(Interface,iid) \
struct Interface; \
_DEFINE_UUID(Interface,iid)


銆銆榪欐牱涓鏉ワ紝灝卞凡緇忔ā鎷熷嚭涓涓猒_uuidof鍏抽敭瀛椼傛垜浠彲浠ュ緢鏂逛究榪涜uuid鐨勫畾涔夈備婦渚嬪涓嬶細
    void test()   
{
CLSID clsid=__uuidof(Class);
IID iid=__uuidof(Interface);
...
}銆銆


銆銆鍦╒C++涓紝涓轟簡涓庡叾浠栫紪璇戝櫒浠ョ浉鍚岀殑鏂瑰紡鏉ヨ繘琛寀uid鐨勫畾涔夛紝鎴戜滑涓嶇洿鎺ヤ嬌鐢╛_declspec(uuid)錛岃屾槸涔熷畾涔塂EFINE_CLSID, DEFINE_IID瀹忥細

    #define DEFINE_CLSID(Class,clsid)           \   
class __declspec(uuid(clsid)) Class

#define DEFINE_IID(Interface,iid) \
struct __declspec(uuid(iid)) Interface


銆銆榪欐牱涓鏉ワ紝鎴戜滑宸茬粡鍦ㄦ墍鏈夊寘鍚玍C++鍦ㄥ唴鐨勬敮鎸佹ā鏉跨壒鍖栨妧鏈殑緙栬瘧鍣ㄤ腑錛屾彁渚涗簡__uuidof鍏抽敭瀛椼傞氳繃瀹冨彲浠ヨ繘涓姝ョ畝鍖栦綘鍦–++璇█涓疄鐜癈OM緇勪歡鐨勪唬浠楓?

銆銆闄勬敞錛氬叧浜庢湰鏂囦嬌鐢ㄧ殑C++妯℃澘鐨勭壒鍖栨妧鏈紝璇︾粏璇峰弬闃匔++鏂囨硶鏂歸潰鐨勪功綾嶏紝渚嬪銆奀++ Primer銆嬨傚叾瀹炶繖涓妧宸у湪C++鏍囧噯搴撯斺擲TL涓湁涓涓笓闂ㄧ殑鍚嶅瓧錛歵raits錛堣悆鍙栵級錛屼綘鍙互鍦ㄥ緢澶氫粙緇峉TL鐨勪功綾嶄腑瑙佸埌鐩稿叧鐨勪粙緇嶃?

銆銆杞敞錛氬洜涓鴻嚜宸變互鍚庡啓鐨勬枃绔犻渶瑕佺敤鍒扮被浼肩殑鎶宸э紝鍥犳鍏堟惉榪囨潵鏀捐繖銆?/p>


chatler 2008-07-19 16:01 鍙戣〃璇勮
]]>
鏇村ソ鍦頒豢鐪烿C++鍏抽敭瀛梍_uuidofhttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56602.htmlchatlerchatlerSat, 19 Jul 2008 06:03:00 GMThttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56602.htmlhttp://m.shnenglu.com/beautykingdom/comments/56602.htmlhttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56602.html#Feedback0http://m.shnenglu.com/beautykingdom/comments/commentRss/56602.htmlhttp://m.shnenglu.com/beautykingdom/services/trackbacks/56602.htmlhttp://m.shnenglu.com/cexer/archive/2008/07/05/55419.html

涓栫晫涓婃湁涓彨__uuidof鐨勫叧閿瓧銆傝繖鏄竴涓鍠繪埛鏅撲笖鍏惰騫挎硾浣跨敤鐨勫叧閿瓧錛屽嚑涔庡彲浠ヨ錛屾湁COM紼嬪簭鍛樼殑鍦版柟錛屽氨鏈夊畠 __uuidof鐨勫瓨鍦ㄣ傚叾寰堝ソ寰堝己澶х殑紼嬪害鏄漢鎵鍏辮鐨勶紝澶稿紶涓鐐規瘮鍠伙細紱誨紑瀹冪殑COM紼嬪簭鍛橈紝灝卞儚澶卞幓浜嗙偣鐏櫒鐨勭伀綆紝铏界劧鍙互浜哄伐鐐圭伀錛屼絾鏄笉瀹夊叏 涓旀棤鏁堢巼銆?

銆銆涓嶈繃寰堝浜哄茍涓嶇煡閬擄紝榪欏叾瀹炴槸涓涓紪璇戝櫒鎵╁睍鍏抽敭瀛楋紝鎻愪緵浜嗘鍏抽敭瀛楃殑浠匳C涓瀹跺埆鏃犲畠搴椼傚垢榪愮殑鏄紝寮哄ぇ鐨凜++璁╂垜浠兘澶熻交鏄撲豢鐪熷嚭榪欎釜鍏抽敭瀛楃殑澶ч儴鍒嗗姛鑳姐?

銆銆緗戜笂鑳藉鎵懼埌涓縐嶄豢鐪熺殑鏂規硶錛岃璁稿紡浼?銆婁豢鐪烿C++鎻愪緵鐨勫叧閿瓧__uuidof銆?/a>銆傝鏂規硶鐨勫疄鐜版槸錛氱壒鍖栨ā鏉跨被鐨勬垚鍛樺嚱鏁幫紝鐒跺悗榪愯鏃惰皟鐢ㄥ嚱鏁版牴鎹甎UID瀛楃涓蹭駭鐢熷嚭UUID錛岀敱浜庢槸鐢熸垚浜庤繍琛屾椂錛屾墍浠ュ畠鏃犲彲閬垮厤鍦版湁涓や釜緙虹偣錛?

  • 瀛樺湪榪愯鏃舵秷鑰椼?
  • 鏃犳硶浣滀負闈炵被鍨嬫ā鏉垮弬鏁頒紶閫掔粰妯℃澘銆?

銆銆閭d簺鏁村ぉ嫻佺潃鍙f按榪芥眰鏁堢巼鐨凜++紼嬪簭鍛樹滑錛屾槸涓嶈兘蹇嶅彈浠諱綍涓嶅繀瑕佺殑榪愯鏃舵秷鑰楃殑銆傚浜庣浜岀偣錛孷C鐨勫叧閿瓧__uuidof鍙栧嚭鏉ョ殑UUID 鏄兘澶熶綔涓洪潪綾誨瀷妯℃澘鍙傛暟浼犻掔殑錛孉TL涓氨澶ч噺鍦頒嬌鐢ㄤ簡榪欐牱鐨勫弬鏁頒紶閫掑艦寮忥紝鎵浠ョ洰鍓嶇殑榪欑瀹炵幇鍔熻兘鏈夐檺錛屼豢鐪熷害榪樹笉澶熼珮銆?

銆銆鍏跺疄鍙鑳借瀹冭兘澶熺紪璇戞湡鍐沖畾UUID鐨勫鹼紝閭d箞榪欎袱涓棶棰樺氨榪庡垉鑰岃В浜嗐傝岃繖鏄偗瀹氬彲浠ュ疄鐜扮殑錛屽茍涓斿緢綆鍗曘傛垜鏇劇粡鍦ㄨ嚜宸卞啓鐨勪竴涓狢OM搴撻噷瀹炵幇榪囪繖鏍風殑鏂規硶錛岃櫧鐒墮偅涓簱宸茬粡涓嶇煡涓㈠埌鍝噷鍘諱簡錛屼笉榪囬偅涓柟娉曡繕璁板緱銆?

銆銆瑙e喅鐨勯斿緞榪樻槸紱諱笉寮妯℃澘鐗瑰寲銆傜被鐨勬垚鍛樺寘鎷垚鍛樺嚱鏁板拰鎴愬憳鍙橀噺錛屽嚱鏁版槸榪愯鏃朵綔鐢ㄧ殑錛岀劧鑰宻tatic const鐨勬垚鍛樺彉閲忓彲浠ユ槸緙栬瘧鏈熷氨鍐沖畾銆傛墍浠ヨВ鍐崇殑鏂規硶灝卞湪鐪煎墠浜嗭細鐗瑰寲妯℃澘鐨勬垚鍛樺彉閲忋?

銆銆浠ヤ笅鏄垜鐨勫疄鐜版柟娉曘?

銆銆鍏堝畾涔変竴涓被妯℃澘錛屽畠鏈変竴涓猻tatic const ,UUID綾誨瀷鐨勬垚鍛樺彉閲忥細

    template<typename T>   
struct _uuid_of_impl
{
static const UUID id;
};
template<typename T>
const UUID _uuid_of_impl<T>::id=GUID_NULL;

銆銆鏈変簡榪欎釜綆鍗曠殑涓滆タ灝卞ソ鍔炰簡錛屽彧闇瑕侀拡瀵規煇涓帴鍙g壒瀹冪殑鎴愬憳鍙橀噺灝辮浜嗭紝濡傦細

    template<>    
const UUID _uuid_of_impl<IUnknown>::id=IID_IUnknown;

template<>
const UUID _uuid_of_impl<IDispatch>::id=IID_IDispatch;


銆銆鐒跺悗鎴戜滑灝卞彲浠ヨ繖鏍峰彇寰楁帴鍙g殑UUID錛?/p>

    IID IunknownID=_uuid_of_impl<IUnknown>::id;   
IID IdispatchID=_uuid_of_impl<IDispatch>::id;


銆銆浣滀負闈炵被鍨嬫ā鏉垮弬鏁頒紶閫掞細

    template<const IID* t_iid>   
struct __uuid_of_test
{
__uuid_of_test()
{}

void test()
{
t_iid;
}
};

__uuid_of_test<&(_uuid_of_impl<IDispatch>::id) > obj;


銆銆涓嶈繃鐜板湪榪欑瀹炵幇榪樻湁涓浜涢棶棰橈紝鐪嬩互涓嬩唬鐮侊細

    IID ITypelibID=_uuid_of_impl<ITypeLib>::id;


銆銆娉ㄦ剰鎴戜滑騫舵病鏈変簨鍏堝妯℃澘__uuid_of_impl鐗瑰寲ITypeLib鐨勭増鏈備絾鏄互涓婅鍙ュ嵈鑳藉緙栬瘧閫氳繃錛屽湪榪愯鏃訛紝 __uuid_of_impl<ITypeLib>鐨勫煎皢浼氭槸閿欒鐨勫糋UID_NULL銆傝繖鏄洜涓猴紝鎴戜滑瀹氫箟妯℃澘鐨勬椂鍊欙紝鍚屾椂鍦ㄦā鏉垮瀹氫箟 浜嗘ā鏉跨殑闈欐佹垚鍛樺彉閲忓茍璧嬪間負GUID_NULL錛屾墍浠ユ病鏈夌敤鐗瑰寲鐨勬柟娉曞畾涔塙UID鐨勬帴鍙o紝閮藉皢浣跨敤GUID_NULL榪欎釜閫氱敤鍊箋傝繖褰撶劧涓嶆槸鎴戜滑鎯寵 鐨勩傛墍浠ユ垜浠兂鍦ㄦ病鏈夊畾涔塙UID鐨勬椂鍊欒緙栬瘧鍣ㄨ鍛婃垜浠紝瑕佽揪鍒拌繖鏍風殑鏁堟灉鍙渶瑕佸幓鎺変笂闈㈤偅鍙ワ細

    template<typename T>   
const UUID _uuid_of_impl<T>::id=GUID_NULL;


銆銆鐜板湪鍐嶈繘琛岀紪璇戯紝緙栬瘧鍣ㄤ細鍛婅瘔浣狅紝鏈変竴涓棤娉曡В鏋愮殑絎﹀彿銆傛牴鎹紪璇戝櫒鎻愪緵鐨勭浉鍏充俊鎭紝寰堝鏄撳氨鑳界‘瀹氶棶棰樻墍鍦ㄣ傝繖鏍瘋兘澶熷湪緙栬瘧鏈熸瀬澶у湴鍑忓皬瀹夊叏闅愭偅銆?

銆銆鏈鍚庡姞涓婃垜浠畾涔夌殑鍑犱釜瀹忥紝榪欐槸鏈鍚庣殑鍏ㄩ儴瀹炵幇錛?/p>

    template<typename T>   
struct _uuid_of_impl
{
static const UUID id;
};

#define uuid_of(x) _uuid_of_impl<x>::id
#define DEFINE_UUID(x,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
template<> \
const UUID _uuid_of_impl<x>::id={l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}


銆銆鐢ㄤ互涓嬩唬鐮佹祴璇曢氳繃錛?/p>

    struct ITest{};   

DEFINE_UUID(ITest,0x96289151,0xf059,0x4049,0x88,0x19,0x61,0xa6,0xe9,0x79,0xc,0xf1);

template<const IID* t_iid>
struct uuid_of_test
{
uuid_of_test(){}
};

int main()
{
IID xxxxID=uuid_of(ITest);
uuid_of_test<&(uuid_of(ITest))> obj;

return 0;
}


銆銆闇瑕佹敞鎰忕殑鏄疍EFINE_UUID搴旇鍦ㄥ疄鐜版枃浠訛紙*.cpp錛?.cxx錛?#8230;…錛夊綋涓嬌鐢ㄣ傚埌榪欓噷錛屼粛鏈変竴浜涗嬌鐢ㄦ柟娉曚笌VC鐨勫叧閿? 瀛楁槸涓嶄竴鏍風殑錛屾墍浠ヤ粛娌″仛鍒頒豢鐪熷害100%銆備笉榪囨垜鐩鎬俊閫氳繃棰勫鐞嗗厓緙栫▼錛岃兘澶熺浉褰撶▼搴﹀湴閫艱繎瀹冿紝鍙槸鎴戝棰勫鐞嗗厓緙栫▼涓嶆槸寰堜簡瑙o紝鎵浠ュ氨涓嶅湪榪欓噷鐚笐 浜嗐?/p>

chatler 2008-07-19 14:03 鍙戣〃璇勮
]]>
C++緙栬瘧鏈熷嚱鏁?鍙橀噺媯嫻嬫妧鏈紝浠跨湡VC鍏抽敭瀛梍_if_exists<杞?gt;http://m.shnenglu.com/beautykingdom/archive/2008/07/19/56601.htmlchatlerchatlerSat, 19 Jul 2008 05:50:00 GMThttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56601.htmlhttp://m.shnenglu.com/beautykingdom/comments/56601.htmlhttp://m.shnenglu.com/beautykingdom/archive/2008/07/19/56601.html#Feedback0http://m.shnenglu.com/beautykingdom/comments/commentRss/56601.htmlhttp://m.shnenglu.com/beautykingdom/services/trackbacks/56601.htmlhttp://m.shnenglu.com/cexer/archive/2008/07/06/55484.html

銆銆VC褰撲腑鏈変竴涓矞涓轟漢鐭ョ殑鍏抽敭瀛楋紝闄や簡寰蔣鑷繁鐨勪唬鐮侊紝鎴戜粠鏈湪浠諱綍鍦版柟鐪嬪埌鏈変漢鐢ㄨ繃瀹冦傝櫧鐒跺畠鐨勫姛鑳藉緢寮哄ぇ錛屼笉榪囬櫎闈炶璁′笂鐨勯棶棰樻垨鏄竴浜涙棤娉曟帓闄ょ殑鍥伴毦錛屽惁鍒欏嚑涔庝粠涓嶄細闇瑕佺敤鍒板畠鐨勫姛鑳姐備絾鏄湁鏃跺欙紝瀹冪‘瀹炶兘浣滀負涓涓渶綆鍗曠殑瑙e喅鏂規鑰岃鏌愪簺璁捐榪囩▼浜嬪崐鍔熷嶃?

銆銆鍊熺敤 CCTV10銆婅蛋榪戠瀛︺嬬殑璇皵錛氶偅涔堣繖涓縐樼殑鍏抽敭鍏抽敭瀛楀埌搴曟槸浠涔堝憿錛熷畠鍙堝疄鐜頒簡浠涔堢濂囩殑鍔熻兘鍛紵甯︾潃榪欎竴榪炰覆鐨勭枒闂紝璁╂垜浠厛鏉ョ湅涓涓叿浣撶殑渚嬪瓙銆?/p>

銆銆鎴戝湪鑷繁鏇劇粡鍐欑殑涓涓狦UI妗嗘灦褰撲腑錛屼負浜嗗疄鐜版秷鎭笌澶勭悊鍑芥暟鑷姩鏄犲皠鐨勶紝灝遍渶瑕佹眰鍔╀簬榪欑鍔熻兘銆傛瘮濡傝鏈変竴涓獥鍙g被錛屽畠鍖呭惈鑻ュ共娑堟伅澶勭悊鍑芥暟鍜屼竴涓秷鎭笌澶勭悊鍑芥暟鐨勬槧灝?map錛氾紙璇鋒棤瑙嗗綋涓殑 show() 鍜?create() 鍑芥暟錛屼笌涓婚鏃犲叧錛?/p>

    class Window
{
typedef UINT _Message;
typedef LRESULT (Window::*_Handler)(_Message);

map<_Message,_Handler> m_handlerMap;

public:
bool show();
bool create();

public:
LRESULT onEvent( WindowEvent<WM_CREATE> );
LRESULT onEvent( WindowEvent<WM_DESTROY> );
};

銆銆
銆銆鎴戦渶瑕佸埄鐢ㄦā鏉垮厓緙栫▼ 浠?0 鍒?WM_USER  榪涜寰幆媯嫻嬶紝媯嫻?Window 綾繪槸鍚﹀瓨鍦ㄨ娑堟伅瀵瑰簲鐨勫鐞嗗嚱鏁般傚鏋滄秷鎭搴旂殑澶勭悊鍑芥暟瀛樺湪錛岄偅涔堝氨灝嗘秷鎭笌鍑芥暟鐨勬槧灝勬斁榪?m_handlerMap 褰撲腑銆傛瘮濡傝娑堟伅 WM_CREATE錛屾垜媯嫻嬬被 Window鏄惁瀛樺湪 LRESULT onEvent( WindowEvent<WM_CREATE> ) 鎴愬憳鍑芥暟錛屽湪涓婁緥浠g爜涓槸瀛樺湪鐨勶紝浜庢槸鎴戝皢榪欐牱涓涓槧灝勬斁榪沵_handlerMap錛氾紙鐪熸瀹炵幇鐨勬椂鍊欙紝榪樿鑰冭檻鍑芥暟鐨勭被鍨嬨備笉鍚岀被鍨嬬殑鍑芥暟錛屾槸涓嶈兘鐩? 鎺ヨ榪?map 褰撲腑鐨勩備笉榪囧湪榪欓噷璇鋒棤瑙嗕緥瀛愬綋涓秹鍙婄殑鎵鏈夌被鍨嬭漿鎹紝涓庝富棰樻棤鍏籌級

    pair<WM_CREATE,&Window::onEvent>


銆銆榪欐牱灝辮揪鍒頒簡娑堟伅鑷姩鏄犲皠鐨勭洰鐨勩傝屼笉鐢ㄥ儚MFC涓鏍鋒墜鍐欏畯鍘繪槧灝勩傦紙鏈鍚庨氳繃鍔姏鐨勭‘杈懼埌浜嗘垜鐨勭洰鐨勶紝鎴戠殑GUI妗嗘灦鑳藉榪涜鑷姩娑? 鎭槧灝勪簡錛岀劧鑰屽彲浠ラ瑙侊紝鐢變簬鍑犲崈涓紙0錛峎M_USER錛夊驚鐜紝緙栬瘧鏈熺殑閫熷害鍙楀埌鏋佸ぇ褰卞搷銆傛墍浠ユ渶緇堟垜榪樻槸鎶涘純浜嗚繖縐嶈嚜鍔ㄦ槧灝勫疄鐜幫紝鑰岄噰鐢ㄤ簡鏇撮珮鏁堢濂? 鐨勬柟娉曪紝榪欐槸鍚庤瘽涔熶笌鏈富棰樻棤鍏沖氨鍏堜笉鎻愶級銆?/p>

銆銆瑕佸疄鐜頒互涓婄殑鑷姩鏄犲皠鍔熻兘灝卞紩鍑轟簡榪欐牱涓涓毦棰橈細濡備綍緙栬瘧鏈熸嫻嬬被鐨勬煇鐗瑰畾鍚嶅瓧鐨勬垚鍛樻槸鍚﹀瓨鍦ㄣ?/p>

銆銆鍔熻兘涓嶈礋鏈夊績浜猴紝緇忚繃鐖北娑夋按緲誨北瓚婂箔錛屾垜緇堜簬鍦?MSDN 涓涓亸榪滆钀介噷鎵劇潃浜嗕紶璇村綋涓偅涓縐樼殑鍏抽敭瀛楋細__if_exists錛堝叾瀹炶繕鏈変竴涓?__if_not_exists錛夈侻SDN 褰撲腑榪欐牱璇存槑錛歘_if_exists 錛坃_if_not_exists錛夊厑璁鎬綘閽堝鏌愮鍙風殑瀛樺湪涓庡惁鏉′歡鎬у湴鎵ц璇彞銆備嬌鐢ㄨ娉曪細錛堟敞鎰忔嫻嬬殑鏄?#8220;瀛樺湪鎬?#8221;錛岃屼笉鏄鹼級

    __if_exists ( /*浣犺媯嫻嬪瓨鍦ㄦх殑鍑芥暟鎴栧彉閲忕殑鍚嶅瓧*/ ) { 
//鍋氫簺鏈夌敤鐨勪簨
}


銆銆MSDN褰撲腑鐨勭ず渚嬩唬鐮佸涓?
    // the__if_exists_statement.cpp
// compile with: /EHsc
#include <iostream>

template<typename T>
class X : public T {
public:
void Dump() {
std::cout << "In X<T>::Dump()" << std::endl;

__if_exists(T::Dump) {
T::Dump();
}

__if_not_exists(T::Dump) {
std::cout << "T::Dump does not exist" << std::endl;
}
}
};

class A {
public:
void Dump() {
std::cout << "In A::Dump()" << std::endl;
}
};

class B {};

bool g_bFlag = true;

class C {
public:
void f(int);
void f(double);
};

int main() {
X<A> x1;
X<B> x2;

x1.Dump();
x2.Dump();

__if_exists(::g_bFlag) {
std::cout << "g_bFlag = " << g_bFlag << std::endl;
}

__if_exists(C::f) {
std::cout << "C::f exists" << std::endl;
}

return 0;
}


銆銆浠ヤ笂浠g爜鐨勮緭鍑哄涓嬶細錛堟湭嫻嬭瘯錛屾杈撳嚭涓篗SDN鐨勮鏄庢枃妗e綋涓殑錛?/p>

    In X<T>::Dump()
In A::Dump()
In X<T>::Dump()
T::Dump does not exist
g_bFlag = 1
C::f exists


銆銆澶ф寰堝皯浜鴻榪囪繖涓叧閿瓧鍚с傝櫧鐒跺畠浠殑鍔熻兘涓庢垜鐨勯渶姹傛槸濡傛鐨勬帴榪戯紝浣嗘槸闈㈠濡傛寮烘喚鐨勫叧閿瓧錛屾垜榪樻槸鍙兘鎽囧ご鍙規伅銆傛垜浼ゅ績鍦板湪鏂囨。 閲岀湅鍒拌鏄庯紝__if_exists錛坃_if_not_exists錛夊叧閿瓧鐢ㄤ簬鍑芥暟鐨勬椂鍊欙紝鍙兘鏍規嵁鍑芥暟鍚嶅瓧榪涜媯嫻嬶紝鑰屼細蹇界暐瀵瑰弬鏁板垪琛ㄧ殑媯嫻嬶紝鍥? 姝ゆ病鏈夊閲嶈澆鍑芥暟鐨勫垎杈ㄨ兘鍔涳紝鑰屾鏄垜闇瑕佺殑銆傛瘮濡傜被 Window 鏈変竴涓嚱鏁幫細

    LRESULT Window::onEvent( WindowEvent<WM_DESTROY> )
{
//鍋氫簺鏈夌敤鐨勪簨
}


銆銆鎴戠敤浠ヤ笅浠g爜鏉ユ嫻?WM_CREATE 娑堟伅鏄惁瀛樺湪澶勭悊鍑芥暟錛?/p>

    __if_exists(Window::onEvent)
銆銆{
      //娣誨姞娑堟伅鏄犲皠
   }


銆銆鍗充嬌 Window 綾誨綋涓笉瀛樺湪 LRESULT onEvent ( WindowEvent<WM_CREATE> )錛屼互涓婃祴璇曚篃鑳介氳繃銆傝繖鏄洜涓?__if_exists 鍏抽敭瀛楁槸涓嶇鍑芥暟閲嶈澆鐨勶紝濡傛灉瀛樺湪涓涓?onEvent 錛岄偅涔堟墍鏈夌殑媯嫻嬮兘鑳介氳繃銆傝繖涓嶆槸鎴戞兂瑕佺殑銆傛垜闇瑕佹瘮 __if_exists 鏇村己鎲劇殑媯嫻嬪姛鑳斤紝寮烘喚鍒拌兘澶熼拡瀵逛笉鍚屽弬鏁板垪琛ㄧ殑鍚屽悕鍑芥暟錛堥噸杞藉嚱鏁幫級鍋氬嚭姝g‘鐨勫瓨鍦ㄦф祴璇曘?/p>

銆銆浜庢槸鎴戠戶緇炕灞辮秺宀湴瀵繪壘錛屼粠 CSDN 鍒?MSDN錛屼粠 SourceForge 鍒?CodeProject銆傝鐩鎬俊閭e彞鑰佽瘽錛?#8220;鏈夊績浜哄ぉ涓嶈礋”銆傛渶鍚庢垜鍦?CodeProject 涓婇潰鐪嬪埌涓綃囪鎴戦啀閱愮亴欏剁殑鏂囩珷錛?/p>

銆銆Interface Detection by Alexandre Courpron

銆銆榪欑瘒鏂囩珷浠庡師鐞嗗埌瀹炵幇錛屽緢璇︾粏鍦拌鏄庡湴涓縐嶇紪璇戞湡媯嫻嬫妧鏈紝鍏堣鏄庝竴涓嬶紝鐢變簬VC7.1鏁板崈涓猙ug褰撲腑鐨勪竴涓紝浠ヤ笅鎶鏈笉鑳藉湪VC++7.1鎴栨洿浣庣増鏈笂浣跨敤銆傚叿浣撶殑瀹炵幇鍦ㄩ偅綃囨枃绔犲綋涓寰楀緢璇﹀敖浜嗭紝榪樻槸鍦ㄨ繖鍎胯禈榪頒竴涓嬨?/p>

銆銆Alexandre Courpron鐨勫疄鐜版柟寮忓熀浜嶤++鐨勮繖鏍蜂竴涓鍒欙細Substitution Failure Is Not An Error 錛堢畝縐癝FINAE錛夈傚畠鐨勫惈涔夋垜涔熺悊瑙e緱姣旇緝鍚硦錛屼笉榪囧畠浣滅敤浜庨噸杞藉嚱鏁扮殑鏃跺欙紝鍙互榪欐牱鐞嗚В錛氬浜庝竴涓嚱鏁拌皟鐢紝鍦ㄥ尮閰嶅嚱鏁扮殑榪囩▼褰撲腑錛屽鏋滄渶緇堣兘澶? 鏈変竴涓嚱鏁板尮閰嶆垚鍔燂紝閭d箞瀵瑰叾浣欏嚱鏁扮殑鍖歸厤濡傛灉澶辮觸錛岀紪璇戝櫒涔熶笉浼氳涓洪敊璇傚惉璧鋒潵鏈変簺楹葷儲錛岀湅Alexandre Courpron緇欏嚭鐨勪緥瀛愶細

    struct Test 
{
typedef int Type;
};

template < typename T >
void f(typename T::Type) {} // definition #1

template<typename T>
void f(T){} // definition #2

f<Test>(10); //call #1

f<int>(10); //call #2

銆銆
銆銆瀵逛簬 call#1 緙栬瘧鍣ㄧ洿鎺ュ尮閰?definition#1 鎴愬姛銆傚浜?call#2錛岀紪璇戝櫒鍏堢敤 definition#1 鍖歸厤 濡備笅錛?/p>

    void f( typename int::Type ) {}


銆銆榪欐樉鐒舵槸涓嶆紜殑銆備笉榪囩紪璇戝櫒騫舵病鏈夌紪璇戝け璐ユ姤鍛婇敊璇紝鍥犱負涓嬮潰鐨?definition#2 鍖歸厤鎴愬姛錛屾牴鎹?SFINAE鐨?瑙勫垯錛岀紪璇戝櫒鏈夋潈淇濇寔娌夐粯 銆?/p>

銆銆铏界劧鏄釜灝忓皬鐨勮鍒欙紝鍦ㄥ鉤鏃跺嚑涔庝笉浼氭敞鎰忓畠銆傜劧鑰屽湪榪欏効錛屾垜浠嵈鍙互鍒╃敤瀹冨疄鐜扮紪璇戞湡媯嫻嬬殑寮哄ぇ鍔熻兘浜嗭紝涓涓渶綆鍗曠殑紺轟緥錛?/p>

    #include <iostream>
using namespace std;
//
struct TestClass
{
void testFun();
};

struct Exists { char x;};
struct NotExists { char x[2]; };

template <void (TestClass::*)()>
struct Param ;

template <class T>
Exists isExists( Param<&T::testFun>* );

template <class T>
NotExists isExists( ... );
//
int main()
{
cout<<sizeof(isExists<TestClass>(0))<<endl;
}


銆銆涓婇潰鐨勪唬鐮佷細杈撳嚭 錛戙傝鏄庝竴涓嬫嫻嬬殑榪囩▼錛?/p>

  1. 緙栬瘧鍣ㄩ亣鍒?isExists<TestClass>(0) 榪欎竴鍙ワ紝浼氬幓鍖歸厤 isExists 鐨勪袱涓噸杞藉嚱鏁般備笉瀹氶暱鐨勫弬鏁頒紭鍏堢駭鏇翠綆錛屽洜姝ゅ厛鍖歸厤絎竴涓嚱鏁般?
  2. 絎竴涓嚱鏁板弬鏁扮被鍨嬩負 Param<&T::testFun>*錛屽湪榪欓噷鏄?Param<&TestClass::testFun>錛岀紪璇戝櫒鍦ㄥ尮閰嶈繖涓弬鏁扮被鍨嬬殑鏃跺欎細灝濊瘯瀹炰緥鍖栨ā鏉跨被 Param銆?
  3. 緙? 璇戝櫒灝濊瘯鐢?&TestClass::testFun 鍘誨疄渚嬪寲 Param錛屽洜涓?TestClass 紜疄瀛樺湪涓涓?void (TestClass::*)() 綾誨瀷錛屼笖鍚嶄負 testFun 鐨勬垚鍛樺嚱鏁般傛墍浠?Param 鐨勫疄渚嬪寲鎴愬姛錛屽洜姝ゅ弬鏁板尮閰嶆垚鍔熴?
  4. 鍖歸厤絎竴涓嚱鏁版垚鍔熴傜紪璇戝櫒鍐沖畾 isExists<TestClass>(0) 榪欎竴鍙ヨ皟鐢ㄥ氨鏄皟鐢ㄧ殑絎竴涓嚱鏁般?
  5. 鍥犱負絎竴涓嚱鏁拌繑鍥炵殑綾誨瀷涓?Exists錛岀敤 sizeof 鍙栧ぇ灝忓氨鏄?1銆?

銆銆濡傛灉鏄垜浠妸 TestClass 鐨勫畾涔変慨鏀逛負錛氾紙浠呮妸鍑芥暟鐨勫弬鏁扮被鍨嬫敼涓?int 錛?/p>

    struct TestClass
{
void testFun(int);
};


銆銆榪欎竴嬈′唬鐮佷細杈撳嚭 錛掋傚洜涓哄湪絎紦姝ョ殑鏃跺欙紝鐢變簬 TestClass 娌℃湁綾誨瀷涓?void (TestClass::*)()錛屼笖鍚嶄負 testFun 鐨勫嚱鏁幫紝鎵浠ュ疄渚嬪寲 Param 浼氬け璐ワ紝鍥犳鍖歸厤絎竴涓嚱鏁板け璐ャ傜劧鍚庣紪璇戝櫒鍘誨尮閰嶇浜屼釜鍑芥暟銆傚洜涓哄叾鍙傛暟綾誨瀷鏄換鎰忕殑錛岃嚜鐒朵細鍖歸厤鎴愬姛銆傜粨鏋滀細杈撳嚭 2銆?/p>

銆銆褰撶劧榪欏彧鏄釜鏈綆鍗曠殑紺轟緥錛岄氳繃妯℃澘鍖呰綾匯傚彲浠ュ疄鐜版洿鐏墊椿鏇村己澶х殑鍔熻兘銆傛瘮濡傚洖鍒伴偅涓嚜鍔ㄦ秷鎭槧灝勭殑渚嬪瓙錛岀敤浠ヤ笅浠g爜灝辮兘澶熷疄鐜頒簡錛?/p>

//c++std
#include <iostream>
using namespace std;




//windows
#include <windows.h>



//detector
template<typename TWindow,UINT t_msg>
struct MessageHandlerDetector
{
typedef WindowEvent<t_msg> _Event;

struct Exists {char x;};
struct NotExists {char x[2];};

template<LRESULT (TWindow::*)(_Event)>
struct Param;

template<typename T>
static Exists detect( Param<&T::onEvent>* );

template<typename T>
static NotExists detect( ... );

public:
enum{isExists=sizeof(detect<TWindow>(0))==sizeof(Exists)};
};

//test classes
struct Window
{
LRESULT onEvent( WindowEvent<WM_CREATE> );
};

struct Button
{
LRESULT onEvent( WindowEvent<WM_DESTROY> );
};

//main
int main()
{
cout<<MessageHandlerDetector<Window,WM_CREATE>::isExists<<endl;
cout<<MessageHandlerDetector<Window,WM_DESTROY>::isExists<<endl;
cout<<MessageHandlerDetector<Button,WM_CREATE>::isExists<<endl;
cout<<MessageHandlerDetector<Button,WM_DESTROY>::isExists<<endl;

return 0;
}




銆銆浠ヤ笂浠g爜浼氳緭鍑猴細

    1
0
0
1


銆銆浠ヤ笂鐨勭ず渚嬩唬鐮佸啀鍔犱笂妯℃澘鍏冪紪紼嬶紝鍙互寰堣交鏄撳湴瀹炵幇娑堟伅鐨勮嚜鍔ㄦ槧灝勶紝鍏蜂綋瀹炵幇榪欎釜宸蹭笉鍦ㄦ湰璐寸殑璁ㄨ鑼冨洿騫朵笖榪欑鑷姩鏄犲皠鐨勫疄鐜幫紝澶繃澶嶆潅錛屽湪緙栬瘧鏈熸病鏈夋晥鐜囷紝涓斾笉澶熺伒媧匯備笉榪囧湪娑堟伅鏄犲皠鏈哄埗涓婃潵璇達紝宸茬О寰椾笂鏄竴縐嶉潻鍛芥х殑灝濊瘯銆?/p>

銆銆鍦ㄨ瀹屼簡榪欐墍鏈変竴鍒囦箣鍚庯紝鍐嶅憡璇変綘涓涓垜鏈榪戞墠鐭ラ亾鐨勭瀵嗭紙涓嶅噯絎戞垜瀛ら檵瀵¢椈錛夛細鍏跺疄 boost 搴撳綋涓凡鏈夌浉鍏沖姛鑳界殑 MPL  宸ュ叿瀛樺湪錛屽彨鍋?has_xxx銆?/p>

銆銆婧愭枃浠訛細<boost\mpl\has_xxx.hpp>

銆銆鏂囨。錛?a target="_blank">http://www.boost.org/doc/libs/1_35_0/libs/mpl/doc/refmanual/has-xxx-trait-def.html銆?/p>

chatler 2008-07-19 13:50 鍙戣〃璇勮
]]>
色狠狠久久AV五月综合| 久久精品国产亚洲av麻豆小说 | 丁香色欲久久久久久综合网| 日本加勒比久久精品| 亚洲AV无码一区东京热久久| 久久久久亚洲精品无码蜜桃| 亚洲狠狠久久综合一区77777| 国产亚洲成人久久| 欧美黑人激情性久久| 精品国产乱码久久久久久郑州公司| 久久最新精品国产| 97视频久久久| 精品久久久久久国产牛牛app| 97精品伊人久久大香线蕉| 久久国产免费观看精品| 久久无码专区国产精品发布| 一级做a爰片久久毛片16| A级毛片无码久久精品免费| 91亚洲国产成人久久精品网址| 久久综合九色欧美综合狠狠| 亚洲国产精品一区二区久久| 久久婷婷国产综合精品| 成人综合久久精品色婷婷| 成人国内精品久久久久影院VR| 久久综合香蕉国产蜜臀AV| 武侠古典久久婷婷狼人伊人| 亚洲午夜久久久精品影院| 久久亚洲AV成人出白浆无码国产| 日本精品久久久久影院日本| 99久久99久久精品国产片| 久久亚洲国产成人精品性色| 久久AV高潮AV无码AV| 欧美亚洲另类久久综合婷婷| 国产毛片久久久久久国产毛片| 99精品国产在热久久无毒不卡| 亚洲精品无码久久一线| 亚洲精品蜜桃久久久久久| 久久青青草原亚洲av无码app| 少妇无套内谢久久久久| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲七七久久精品中文国产|