锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
闂鎻忚堪錛?br> 鍦?C++ 闈㈠悜瀵硅薄緙栫▼涓紝甯稿父浼?xì)閬囧?#8220;綾誨瀷璇嗗埆”鐨勯渶姹傦細(xì)宸茬煡鏌愪釜瀵硅薄鐨勫熀綾誨瀷鎸囬拡錛岄渶瑕佽瘑鍒瀵硅薄鐨勬淳鐢熺被鍨嬶紝璁塊棶?huà)z劇敓綾誨瀷鐨勫叕鏈夊嚱鏁般傜畝鍗曡灝辨槸錛屽皢鍩虹被鍨嬫寚閽堣漿鎹負(fù)媧劇敓綾誨瀷鎸囬拡錛屽茍鐢ㄦ潵璁塊棶?huà)z劇敓綾誨瀷鐨勫叕鏈夊嚱鏁般?br>
闂鍒嗘瀽錛?nbsp;
“綾誨瀷璇嗗埆”鏈川涓婃槸涓涓粠鎶借薄杞負(fù)鍏瘋薄鐨勮繃紼嬶紝鐮村潖浜?jiǎn)瀵硅薄鎶借薄鎬с傝櫧涓嶅煎緱鎻愬★紝浣嗗湪鍏瘋薄鍖栨儏鏅笅錛?#8220;綾誨瀷璇嗗埆”鍙堟槸蹇呴』鐨勩?br> “綾誨瀷璇嗗埆”甯歌鏂規(guī)硶鏄己鍒剁被鍨嬭漿鎹€傝繖闇瑕佸厛瀹氫箟涓涓?#8220;瀵硅薄綾誨瀷”鏋氫婦琛紝鍐嶅湪鍩虹被閲屽畾涔変竴涓繑鍥?#8220;瀵硅薄綾誨瀷”鐨勫嚱鏁般傝繖縐嶆柟娉曠殑緙虹偣鏄捐屾槗瑙侊細(xì)
1. 闇瑕佺淮鎶ゅ叏灞鎬х殑“瀵硅薄綾誨瀷”鏋氫婦琛紱
2. 鍚戝熀綾誨瀷鏋勯犲嚱鏁頒紶鍏?#8220;瀵硅薄綾誨瀷”鍙傛暟錛?br> 3. 姣忔“綾誨瀷杞崲”鍓嶏紝鍏堣鑾峰緱“瀵硅薄綾誨瀷”鍊鹼紝鍒ゆ柇瀵硅薄綾誨瀷錛?br> “綾誨瀷璇嗗埆”鐨勫彟涓縐嶆爣鍑嗘柟娉曟槸RTTI銆備綔涓轟竴欏?C++ 緙栬瘧閫夐」錛孯TTI 鐩存帴灝嗕笂榪板父瑙勬柟娉曟暀緇欑紪璇戝櫒鍋氫簡(jiǎn)銆傜劧鑰岋紝榪欐牱涔熸槸鏈夌己鐐圭殑錛?br> 1. RTTI浼?xì)寮曞叆棰濆鐨勫紑閿銆傝繖鏄彲浠ョ悊瑙g殑錛岄棶棰樻槸RTTI榪欑寮閿浼?xì)闄勫姞鍒版墍鏈夌被鍨嬩笂鍘伙紱
2. RTTI瑕佹眰鎵鏈夊簱閮戒互RTTI鏂瑰紡緙栬瘧錛屾墠鑳芥甯稿伐浣溿傝岀幇瀹炰笘鐣屾繪槸澶嶆潅鐨勶紝榪欎竴鐐規(guī)湭蹇呮繪槸鑳藉疄鐜幫紱
3. 涓漢璁や負(fù)RTTI鏄竴縐嶈繃浜庡艦寮忓寲鐨勪笢瑗匡紝榪濆弽浜?C++ 鐨勭畝媧佹с侀珮鏁堟у師鍒欙紱
4. 涓漢璁や負(fù)RTTI鐨勪綆灞傚艦寮忓寲鐨勪笢瑗匡紝寰堝鏃跺欙紝鎴戜滑浠嶇劧闇瑕佸畾涔変笉渚濊禆浜嶤++綾葷殑“瀵硅薄綾誨瀷”鏋氫婦琛紱
闃呰 WebKit 浠g爜鏃訛紝鎴戠湅鍒頒簡(jiǎn)涓縐嶅熀浜庤櫄鍑芥暟鐨?#8220;綾誨瀷璇嗗埆”鏂規(guī)硶錛屼唬鐮佸涓嬶細(xì)
class EventTarget {
public:
void ref() { refEventTarget(); }
void deref() { derefEventTarget(); }
virtual EventSource* toEventSource();
virtual MessagePort* toMessagePort();
virtual Node* toNode();
virtual DOMWindow* toDOMWindow();
virtual XMLHttpRequest* toXMLHttpRequest();
virtual XMLHttpRequestUpload* toXMLHttpRequestUpload();
鍦ㄥ熀綾諱腑錛屽畾涔夊悜媧劇敓綾誨瀷鐨勮漿鎹㈠嚱鏁幫紝騫朵笖榪斿洖涓篘ULL銆傛瘡涓淳鐢熺被鍨嬶紝閲嶆柊瀹炵幇鍚戣嚜韜漿鎹㈢殑杞崲鍑芥暟錛岃繑鍥炶嚜韜殑鎸囬拡銆傛垜鎰熻榪欑鏂規(guī)硶錛?br> 1. 闈炲父瀹夊叏錛屼嬌鐢ㄦ柟渚匡紱
2. 鏁堢巼鐩稿姣旇緝楂橈紱
3. 鐪佸嵈浜?jiǎn)鍏ㄥ眬鎬х殑“瀵硅薄綾誨瀷”鏋氫婦琛紝鍗村甫鏉ヤ簡(jiǎn)緇存姢鍩虹被“杞崲鍑芥暟”鐨勮礋鎷咃紱
4. 閫犳垚浜?jiǎn)鍩壕c誨媧劇敓綾葷殑渚濊禆鎬э紝浼間箮涓嶅お濂姐?br>
鍦ㄤ笂榪版柟娉曠殑鍩虹涓婏紝璁炬兂浜?jiǎn)涓縐嶆敼榪涚殑鏂規(guī)硶錛岃璁″師鍒欐槸“浠庡熀綾誨瀷鍚戞淳鐢熺被鍨嬭漿鎹㈢殑鍑芥暟錛屽簲璇ユ斁緗湪媧劇敓綾諱腑錛屼互闈?rùn)鎬佸嚱鏁扮殑鏂瑰紡瀹氫箟”銆傚叿浣撴柟娉曞涓嬶細(xì)
1. 鍩虹被瀹氫箟 void* toXXXX() 鍜?bool isXXXX() 涓や釜縐佹湁铏氬嚱鏁幫紝鐢ㄧ紪紼嬭鑼冭瀹氾紝紱佹媧劇敓綾葷洿鎺ヨ闂畠浠?br> 2. 媧劇敓綾婚噸瀹氫箟涓婅堪鍑芥暟銆?br> 3. 媧劇敓綾誨瀷瀹氫箟 XXXX* toType(Base*) 鍜?bool isType(Base*)涓や釜闈?rùn)鎬佸嚱鏁幫紝鍐呴儴瀹炵幇灝辨槸閫氳繃涓婅堪縐佹湁铏氬嚱鏁板畬鎴愮殑銆?br> 4. 鎵鏈夌殑“綾誨瀷璇嗗埆鎿嶄綔”閮戒嬌鐢ㄤ笂榪伴潤(rùn)鎬佸嚱鏁板畬鎴愩?br>