锘??xml version="1.0" encoding="utf-8" standalone="yes"?>在线欧美小视频,美国成人直播,久久狠狠亚洲综合http://www.shnenglu.com/ace/category/1169.html<table style="border:1px solid #aa0033; font-size:small" align=center> <tr> <td rowspan=3> </td> <td colspan=2 align=center><b>璁㈤槄 ace-china</b></td> </tr> <form action="http://groups.google.com/group/ace-china/boxsubscribe"> <input type=hidden name="hl" value="zh-CN"> <tr> <td>鐢靛瓙閭歡錛?<input type=text name=email></td> <td> <table style="background-color:#ffcc33;padding:2px;border:2px outset #ffcc33;"> <tr> <td> <input type=submit name="sub" value="璁㈤槄"> </td> </tr> </table> </td> </tr> </form> <tr><td colspan=2 align=center> 嫻忚瀛樹簬 <a >groups.google.com</a> 涓婄殑<a >鎵鏈夊笘瀛?lt;/a> </td></tr> </table>zh-cnTue, 20 May 2008 01:09:29 GMTTue, 20 May 2008 01:09:29 GMT60鍦╒isual Studio 2005涓嬩嬌鐢–PPUnit鍚戝http://www.shnenglu.com/ace/archive/2006/08/04/10842.htmlStone JiangStone JiangFri, 04 Aug 2006 07:35:00 GMThttp://www.shnenglu.com/ace/archive/2006/08/04/10842.htmlhttp://www.shnenglu.com/ace/comments/10842.htmlhttp://www.shnenglu.com/ace/archive/2006/08/04/10842.html#Feedback1http://www.shnenglu.com/ace/comments/commentRss/10842.htmlhttp://www.shnenglu.com/ace/services/trackbacks/10842.html浣跨敤CPPUnitProjectWizard鍚戝鍒涘緩鏀寔浣跨敤CPPUnit鐨勬祴璇曠被鐨刅isual Studio 2005欏圭洰銆?/p>

瀹夎鍚戝
0. 涓嬭澆 CPPUnitProjectWizard
聽聽聽 http://cppunit.sourceforge.net/cppunit-wiki/CppUnitVisualStudio2005Wizard?action=AttachFile&do=get&target=CPPUnitProjectWizard.7z

1. 澶嶅埗鏂囦歡
聽聽聽聽 CPPUnitProjectWizard.vsdir聽 - 涓哄悜瀵煎懡鍚?br />聽聽聽聽 CPPUnitProjectWizard.vsz聽聽聽 - 璁¬S8鐭ラ亾浠庡摢閲屾壘鍒板悜瀵?br />聽聽聽 鍒版偍鐨刅isual Studio 8瀹夎鐩綍涓嬬殑 VSProjects 鏂囦歡澶逛腑銆?br />聽聽聽
2. 鎶婃暣涓狢PPUnitProjectWizard瑙e喅鏂規鏂囦歡澶瑰鍒跺埌鎮ㄧ殑Visual Studio 8瀹夎鐩綍涓嬬殑VCWizards鏂囦歡澶逛腑銆?br />聽聽 姣斿錛屾垜鏀懼湪c:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\CPPUnitProjectWizard\CPPUnitProjectWizard
聽聽 鎴栬咃紝涔熷彲浠ユ斁鍦ㄤ綘鎯蟲斁緗殑鍏跺畠鍦版柟錛岀劧鍚庣紪璇慍PPUnitProjectWizard.vsz錛屽畾涔夊弬鏁?ABSOLUTE_PATH
聽聽 Param="ABSOLUTE_PATH = c:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\CPPUnitProjectWizard\CPPUnitProjectWizard"
聽聽
3. 璇ラ」鐩渶瑕佸畾涔夌幆澧冨彉閲?CPPUNITDIR
聽聽 姣斿錛屾垜鐨勭幆澧冨彉閲徛?%CPPUNITDIR% = D:\cppunit-1.12.0
聽聽 鏈鍚庯紝淇敼 鐜鍙橀噺 %PATH%,鍦≒ATH璺緞涓紝澧炲姞 %CPPUNITDIR%/lib錛屼互渚跨▼搴忓姞杞芥椂鑳芥壘鍒?cppunit_dll.dll
4. 鍦ㄥ紑鍙戠幆澧冧腑錛岃緗ソInclude/Lib璺緞
聽聽聽 %CPPUNITDIR%\Include
聽聽聽 %CPPUNITDIR%\LIB
聽聽聽



Stone Jiang 2006-08-04 15:35 鍙戣〃璇勮
]]>
闈㈠悜瀵硅薄vs鍩轟簬瀵硅薄http://www.shnenglu.com/ace/archive/2006/06/25/8985.htmlStone JiangStone JiangSun, 25 Jun 2006 08:18:00 GMThttp://www.shnenglu.com/ace/archive/2006/06/25/8985.htmlhttp://www.shnenglu.com/ace/comments/8985.htmlhttp://www.shnenglu.com/ace/archive/2006/06/25/8985.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/8985.htmlhttp://www.shnenglu.com/ace/services/trackbacks/8985.html闈㈠悜瀵硅薄vs鍩轟簬瀵硅薄
鐪嬪埌浜嗕竴縐嶈娉曪紝寰堝鎵璋撻潰鍚戝璞″紑鍙戝彧涓嶈繃鏄熀浜庡璞$殑寮鍙?wbr>銆傚弽鎬濊嚜韜紝鍙戣涓閽堣琛銆?/wbr>
鎴戜滑鎵璋撶殑闈㈠悜瀵硅薄錛屽疄闄呬笂鍙笉榪囧皝瑁呬簡涓氬姟瀵硅薄錛屽垎鍑轟簡灞傛錛屾彁渚涗簡鎺ュ彛銆傝櫧鐒跺湪璁捐鍜屽疄鐜扮殑鏃跺欎嬌鐢ㄥ埌浜嗛潰鍚戝璞$殑灝佽錛屼絾鐜板湪鐪嬫潵榪樼畻涓嶄笂鐪熸鐨勯潰鍚戝璞★紝鍙兘綆楁槸鍩轟簬瀵硅薄鑰屽凡銆?/wbr>
闈㈠悜瀵硅薄鐨勫師鍒欏茍娌℃湁絎﹀悎銆傞潰鍚戝璞$殑浼樺娍涔熸病鏈夊彂鎸ワ紝鍙嶈屾劅瑙変竴涓皬鍙樺寲灝辯壍鎵埌澶氬眰鐨勫彉鍔紝楹葷儲銆傚氨濂芥瘮鍘誨勾鐨勯」鐩紝鏁版嵁搴撻噰鐢∣RACLE錛屽疄闄呮湰韜ORACLE騫朵笉鐔熸倝錛屽彧緇忚繃涓嶅埌涓鍛ㄧ殑瀛︿範錛屽氨涓婇┈浜嗐傜粨鏋滃彧涓嶈繃灝哋RACLE褰撴垚MSSQL浣跨敤銆侽RACLE鐨勫己澶т笉浣嗘病鏈変綋鐜幫紙鍒扮幇鍦ㄤ篃娌℃湁鎼炴槑鐧斤級錛屽弽鑰屽け鍘諱簡MSSQL鐨勫ソ鐨勭粡楠屻傚緱涓嶅伩澶便?
涓嶈繃錛屽浣曟墠綆楃湡姝g殑闈㈠悜瀵硅薄鍛紵鎯充簡鎯充竴涓ソ鐨勯潰鍚戝璞$殑瀹炶返錛屽簲璇ユ槸杈懼埌鏈澶ч檺搴︾殑杞歡澶嶇敤錛屽茍涓斿彲浠ュ揩閫熼傚簲涓嶆柇鍙樺寲鐨勯渶姹傦紝鑰屽宸叉湁鐨勯儴鍒嗗獎鍝嶆渶灝?wbr>銆?/wbr>
榪欎笉鏄竴韞磋屽氨鐨勪簨鎯咃紝濡傛灉鎯崇湡姝g殑鐢ㄩ」鐩潵瀹炶返鐨勮瘽錛屾紜殑姝ラ涔熻搴旇鏄細
棣栧厛閲囩敤鏈韓杈冪啛鎮夌殑寮鍙戞柟娉曪紙鍩轟簬瀵硅薄鎴栨槸闈㈠悜榪囩▼錛夋弧瓚充笟鍔¢渶姹?wbr>銆傝繖涓姝ュ緢鍏抽敭錛屽彧鏈夋湁浜嗚繖鏍蜂竴涓師鍨嬫墠鍙互楠岃瘉瀵歸渶姹傜殑婊¤凍紼嬪害銆備釜浜烘劅瑙夌洿鎺ラ潰鍚戝璞′細闄峰叆璁捐榪囧害錛屽茍涓斿湪鍓嶆湡鑰楄垂澶ч噺鐨?wbr>綺懼姏銆傛洿閲嶈鐨勬槸浣跨敤涓嶇啛鎮夌殑鎶鏈細甯︽潵椋庨櫓錛屽緱涓嶅伩澶便?/wbr>
鐒跺悗閫愭笎鐨勫皢閲囩敤鐪熸鐨勯潰鍚戝璞$殑鏂規硶灝嗙幇鏈夌殑鍘熷瀷榪涜閲嶆瀯銆傜洰鐨勬槸鎻愰珮鎬ц兘錛岀伒媧繪?wbr>錛屾墿灞曟э紝鍙鐢ㄦх瓑絳夛紝榪欐槸涓涓暱鏈熺殑涓嶆柇榪唬鐨勮繃紼嬨傚彲浠ュ弬鐪嬬粡鍏哥殑銆婇噸鏋?鏀瑰杽浠g爜璐ㄩ噺銆嬨?/wbr>
鏈鍚庝竴姝ユ槸鏋舵瀯鐨勬彁鐐箋傚皢緋葷粺涓殑鍙互澶栭儴澶嶇敤鐨勯儴鍒嗘彁鐐煎嚭鏉ュ艦鎴?wbr>涓涓彲浠ュ鐢ㄧ殑妗嗘灦鏋舵瀯銆傛湁浜嗗畠錛屼互鍚庣殑寮鍙戠浉浼氫簨鍗婂姛鍊?wbr>銆傛姝ラ灝嗕細鐢ㄥ埌閲嶆瀯鍜岃璁℃ā寮忋傛暣涓殑榪囩▼闄や簡絎竴姝ュ拰闈㈠悜瀵硅薄鏃犲ぇ鍏崇郴澶栵紝鍚庝袱姝ュ垯瀹屽叏鐨勯潰鍚?wbr>瀵硅薄鐨勬濇兂銆?/wbr>
鍦ㄦ涔嬪墠鎬繪槸甯屾湜鍏堟湁涓涓璁¤壇濂界殑鏋舵瀯錛屼竴鐩磋繖鏍蜂笉鏂殑瀛︿範鍜岃繘琛屽疄璺點傜粨鏋滃嵈涓嶅敖浜烘剰銆傜粡楠岃鏄庤繖鏍峰仛紜疄鏈変簺鏈湯鍊掔疆銆傛濡傛ā寮忕殑浣跨敤涓鏍?wbr>錛屽湪鍔ㄦ満涓嶆槑紜殑鎯呭喌涓嬬洸鐩殑濂楃敤妯″紡鏄病鏈夋剰涔夌殑銆?/wbr>
姣忎竴涓紑鍙戜漢鍛樼殑鑴戣涓湁涓浜涢潪甯哥編濡欑殑鍒涙剰錛岃繖浜涘垱鎰忔病鏈夊疄鐜扮殑涓涓師鍥犲氨鏄紝澶繃鍏蟲敞緇嗚妭銆傚浜庨潰鍚戝璞¤繕鏄熀浜庡璞″紑鍙戯紝瀵逛簬瀹炵幇闇姹傦紝瀹屾垚欏圭洰鐨勫垵鏈熼樁孌碉紝鐪熺殑鏃犳墍璋撱傚綋闇瑕佽冭檻鎻愰珮寮鍙戝拰緇存姢鏁堢巼鐨勬椂鍊欙紝闈㈠悜瀵硅薄灝辨垚浜嗗緢涓嶉敊鐨勯夋嫨銆?/div>

]]>紼嬪簭鍛樼殑鍏崳鍏?-- 鏉ユ簮涓嶈http://www.shnenglu.com/ace/archive/2006/06/08/8289.htmlStone JiangStone JiangThu, 08 Jun 2006 03:03:00 GMThttp://www.shnenglu.com/ace/archive/2006/06/08/8289.htmlhttp://www.shnenglu.com/ace/comments/8289.htmlhttp://www.shnenglu.com/ace/archive/2006/06/08/8289.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/8289.htmlhttp://www.shnenglu.com/ace/services/trackbacks/8289.html紼嬪簭鍛樼殑鍏崳鍏?/p>


浠ュ瀹炵紪鐮佷負鑽?浠ュ績嫻皵韜佷負鑰?/p>

浠ヨ緇嗘敞閲婁負鑽?浠ユ敞閲婃畫緙轟負鑰?/p>

浠ュ嫟浜庢祴璇曚負鑽?浠ユ噿浜庢祴璇曚負鑰?/p>

浠ョ畝鏄庢枃妗d負鑽?浠ュ啑浣欐枃妗d負鑰?/p>

浠ユ敞閲嶅洟闃熶負鑽?浠ュ鍌茶嚜澶т負鑰?/p>

浠ュ埢鑻﹂捇鐮斾負鑽?浠ユ暦琛嶄簡浜嬩負鑰?/p>

浠ュ杽浜庢葷粨涓鴻崳 浠ヤ笉鎬濊繘鍙栦負鑰?/p>

浠ヨ川鏁堝茍榪涗負鑽?浠ュ崟鍙栧叾涓涓鴻?/p>

]]>
鍏充簬鐢ㄤ緥鐨勯殢絎?http://www.shnenglu.com/ace/archive/2006/06/06/8214.htmlStone JiangStone JiangTue, 06 Jun 2006 07:56:00 GMThttp://www.shnenglu.com/ace/archive/2006/06/06/8214.htmlhttp://www.shnenglu.com/ace/comments/8214.htmlhttp://www.shnenglu.com/ace/archive/2006/06/06/8214.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/8214.htmlhttp://www.shnenglu.com/ace/services/trackbacks/8214.html http://www.shnenglu.com/ace/archive/2006/06/06/8214.html

榪戞潵鍥犲伐浣滈渶瑕侊紝鎴戠粏闃呰浜嗕竴浜涗笌UML鐩稿叧鐨勪功綾嶃?/p>

榪欓噷錛屼互嫻佹按甯愮殑鏂瑰紡錛屼綔涓璧風瑪褰曘?/p>

鍏充簬鐢ㄤ緥錛?/p>

1. 鐢ㄤ緥鍗蟲槸闇姹傦紝浣嗛渶姹傚茍涓嶆槸鐢ㄤ緥銆?br />聽聽 鐢ㄤ緥鏄弿榪拌璁虹殑緋葷粺(SuD)鍔熻兘鎬ч渶姹傜殑錛屾墍浠ュ彲浠ヨ鐢ㄤ緥灝辨槸闇姹傘備絾闇姹傞櫎浜嗗姛鑳芥ч渶姹傦紝榪樻湁闈炲姛鑳芥ч渶姹傘傛墍浠ワ紝涓嶈兘璇撮渶姹傚氨鏄敤渚嬨?/p>

2. 鐢ㄤ緥涓嶇瓑浜庡姛鑳?br />聽聽 鐢ㄤ緥鏄弿榪扮郴緇熷姛鑳界殑錛屼絾鐢ㄤ緥涓嶆槸鍔熻兘銆傚姛鑳芥槸緋葷粺瑕佽揪鍒版垨婊¤凍鐨勭洰鏍囷紝鐢ㄤ緥鏄敤渚嬬殑鎵ц鑰?Actor)涓庣郴緇熶氦浜掔殑鎿嶄綔搴忓垪銆備袱鑰呮槸鏈夊樊寮傜殑銆?/p>

3. 鐢ㄤ緥鏄枃鏈屼笉鏄浘褰?br />聽聽 鐢ㄤ緥鏄弿榪版墽琛岃呬笌緋葷粺浜や簰鐨勬搷浣滃簭鍒楋紝瑕佷綋鐜板畠鐨勬墽琛岃呭湪涓庣郴緇熶氦浜掍駭鐢熺殑鍙鏌ョ殑浠峰箋傚浘褰粎浠呮槸鐢ㄤ緥鐨勬榪幫紝鍙敾鍥炬槸涓嶅鐨勩傜敱浜庤繖涓鐐癸紝鐢ㄤ緥寤烘ā鏄挵鍐欐枃妗g殑榪囩▼錛岃屼笉鏄敾鍥劇殑榪囩▼銆?/p>

4. 鐢ㄤ緥妯″瀷涓嶄粎浠呮槸灝忎漢鍔犻殢鍦?br />聽聽 鐢ㄤ緥妯″瀷涓嶄粎鏄渶姹傛柟闈㈢殑宸ヤ歡(artifact)錛屽畠榪樺寘鎷ˉ鍏呰鏄?鎻忚堪闈炲姛鑳介渶姹傜殑)錛岃瘝姹囪〃錛屾効鏅拰涓氬姟瑙勫垯銆傝繖浜涘悎鍦ㄤ竴璧鋒墠鏄渶姹傚垎鏋愮殑浜х墿銆?/p>

5. 鐢ㄤ緥鎶鏈棤欏誨璞℃妧鏈紝鍦ㄩ氳繃鐢ㄤ緥鍙戠幇錛屾弿榪幫紝綆$悊闇姹傜殑鏃跺欙紝鐢ㄤ笉鍒板璞℃妧鏈備絾鏄紝鐢ㄤ緥鏄潰鍚戝璞$殑鍒嗘瀽鍜岃璁$殑鍏抽敭闇姹傘?/p>

6. 鐢ㄤ緥蹇呴』鏈変竴涓富鎵ц鑰?(Primary actor)
聽聽 涓繪墽琛岃呯‘瀹氫簡鐢ㄤ緥鐨勫悕縐般傜敤渚嬪懡浠ら氬父鏄互涓繪墽琛岃呰瑙掔殑涓誨姩璇佺殑榪愬緇撴瀯鐨勭煭璇傚洜涓哄彧鏈夎繖鏍風殑鐭鎵嶈兘鍏呭垎鐨勬弿榪板嚭緋葷粺鐨勪環鍊箋傜敤渚嬪緩妯$殑鏍稿績灝辨槸瑕佹弿榪板嚭緋葷粺鐨勪環鍊箋?/p>

7. 涓夌綾誨瀷鐨勬墽琛岃?br />聽聽 鍩烘湰鎵ц鑰?(Primary actor)聽 :榪欑鐢ㄤ緥閫氳繃涓庣郴緇熶氦浜掕兘杈懼埌鐩爣
聽聽 鏀寔鎵ц鑰?(Supporting actor ) : 涓鴻璁虹殑緋葷粺錛圫uD)鎻愪緵鏈嶅姟
聽聽 騫曞悗鎵ц鑰?(Offstage actor ) :闄や簡涓婅堪涓ょ錛屽張瀵逛笂榪頒袱縐嶆墽琛岃呬笌緋葷粺浜や簰榪囩▼鍜岀粨鏋滄劅鍏磋叮鐨勪漢鎴栫墿銆?/p>

]]>
浠嬬粛涓浜涘湪C++鐢ㄦ埛緇勪腑甯稿嚭鐜扮殑緙╃暐璇?/title><link>http://www.shnenglu.com/ace/archive/2006/06/04/8144.html</link><dc:creator>Stone Jiang</dc:creator><author>Stone Jiang</author><pubDate>Sun, 04 Jun 2006 04:18:00 GMT</pubDate><guid>http://www.shnenglu.com/ace/archive/2006/06/04/8144.html</guid><wfw:comment>http://www.shnenglu.com/ace/comments/8144.html</wfw:comment><comments>http://www.shnenglu.com/ace/archive/2006/06/04/8144.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ace/comments/commentRss/8144.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ace/services/trackbacks/8144.html</trackback:ping><description><![CDATA[<p>Here's a partial list of acronyms in alphabetical order: </p> <ul> <li>AFAICS = As far as I can see </li> <li>BTW = By the way </li> <li>FWIW = For what it's worth </li> <li>FYI = For your information </li> <li>HAND = Have a nice day </li> <li>IMHO = In my humble opinion (egoless) </li> <li>IMAO = In my arrogant opinion (oodles of ego) </li> <li>IMNSHO = In my not-so humble opinion (a lot of ego) </li> <li>IMO = In my opinion (not much ego) </li> <li>KUTGW = Keep up the good work </li> <li>MYOB = Mind your own business </li> <li>OO = Object-oriented </li> <li>OTOH = On the other hand </li> <li>PEBCAC = Problem exists between chair and computer </li> <li>PEBCAK = Problem exists between chair and keyboard </li> <li>PMFJI = Pardon me for jumping in </li> <li>RTFM = Read the ___ manual </li> <li>SO = Significant other (as in, "My SO and I went for a walk...") </li> <li>SSO = Small String Optimization (where short strings don't use the heap) </li> <li>YHBT = You have been trolled </li> <li>YHL = You have lost </li> </ul><img src ="http://www.shnenglu.com/ace/aggbug/8144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ace/" target="_blank">Stone Jiang</a> 2006-06-04 12:18 <a href="http://www.shnenglu.com/ace/archive/2006/06/04/8144.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬鐢ㄤ緥妯″紡鐨勪竴鍙ヨ瘽璇勮http://www.shnenglu.com/ace/archive/2006/06/02/8070.htmlStone JiangStone JiangFri, 02 Jun 2006 01:33:00 GMThttp://www.shnenglu.com/ace/archive/2006/06/02/8070.htmlhttp://www.shnenglu.com/ace/comments/8070.htmlhttp://www.shnenglu.com/ace/archive/2006/06/02/8070.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/8070.htmlhttp://www.shnenglu.com/ace/services/trackbacks/8070.html


涔︾睄鎺ㄨ崘 "Use Cases Patterns and Blueprints"
By Gunnar聽脰vergaard, Karin聽Palmkvist
Publisher: Addison Wesley Professional
Pub Date: November 12, 2004
ISBN: 0-13-145134-0
Pages: 464


]]>
static_cast<>鎻瘑 (杞?http://www.shnenglu.com/ace/archive/2006/05/22/7510.htmlStone JiangStone JiangMon, 22 May 2006 13:18:00 GMThttp://www.shnenglu.com/ace/archive/2006/05/22/7510.htmlhttp://www.shnenglu.com/ace/comments/7510.htmlhttp://www.shnenglu.com/ace/archive/2006/05/22/7510.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/7510.htmlhttp://www.shnenglu.com/ace/services/trackbacks/7510.html static_cast<>鎻瘑


浣滆咃細Sam NG

璇戣咃細灝忓垁浜?/a>


鍘熸枃閾炬帴錛?a >What static_cast<> is actually doing


鏈枃璁ㄨstatic_cast<> 鍜?reinterpret_cast<>銆?

浠嬬粛
澶у紼嬪簭鍛樺湪瀛++鍓嶉兘瀛﹁繃C錛屽茍涓斾範鎯簬C椋庢牸錛堢被鍨嬶級杞崲銆傚綋鍐機++錛堢▼搴忥級鏃訛紝鏈夋椂鍊欐垜浠湪浣跨敤static_cast<>鍜宺einterpret_cast<>鏃跺彲鑳戒細鏈夌偣妯$硦銆傚湪鏈枃涓紝鎴戝皢璇存槑static_cast<>瀹為檯涓婂仛浜嗕粈涔堬紝騫朵笖鎸囧嚭涓浜涘皢浼氬鑷撮敊璇殑鎯呭喌銆?br />
娉涘瀷錛圙eneric Types錛?/strong>

        float f = 12.3;
float* pf = &f;

// static cast<>
// 鎴愬姛緙栬瘧, n = 12
int n = static_cast<int>(f);
// 閿欒,鎸囧悜鐨勭被鍨嬫槸鏃犲叧鐨勶紙璇戞敞錛氬嵆鎸囬拡鍙橀噺pf鏄痜loat綾誨瀷錛岀幇鍦ㄨ琚漿鎹負int綾誨瀷錛? //int* pn = static_cast<int*>(pf);
//鎴愬姛緙栬瘧
void* pv = static_cast<void*>(pf);
//鎴愬姛緙栬瘧, 浣嗘槸 *pn2鏄棤鎰忎箟鐨勫唴瀛橈紙rubbish錛?br /> int* pn2 = static_cast<int*>(pv);

// reinterpret_cast<>
//閿欒,緙栬瘧鍣ㄧ煡閬撲綘搴旇璋冪敤static_cast<>
//int i = reinterpret_cast<int>(f);
//鎴愬姛緙栬瘧, 浣嗘槸 *pn 瀹為檯涓婃槸鏃犳剰涔夌殑鍐呭瓨,鍜?*pn2涓鏍?br /> int* pi = reinterpret_cast<int*>(pf);

綆鑰岃█涔嬶紝static_cast<> 灝嗗皾璇曡漿鎹紝涓句緥鏉ヨ錛屽float-鍒?integer錛岃宺einterpret_cast<>綆鍗曟敼鍙樼紪璇戝櫒鐨勬剰鍥鵑噸鏂拌冭檻閭d釜瀵硅薄浣滀負鍙︿竴綾誨瀷銆?br />
鎸囬拡綾誨瀷錛圥ointer Types錛?/strong>

鎸囬拡杞崲鏈夌偣澶嶆潅錛屾垜浠皢鍦ㄦ湰鏂囩殑鍓╀綑閮ㄥ垎浣跨敤涓嬮潰鐨勭被錛?br />
class CBaseX
{
public:
int x;
CBaseX() { x = 10; }
void foo() { printf("CBaseX::foo() x=%d\n", x); }
};

class CBaseY
{
public:
int y;
int* py;
CBaseY() { y = 20; py = &y; }
void bar() { printf("CBaseY::bar() y=%d, *py=%d\n", y, *py); }
};

class CDerived : public CBaseX, public CBaseY
{
public:
int z;
};

鎯呭喌1錛氫袱涓棤鍏崇殑綾諱箣闂寸殑杞崲



      // Convert between CBaseX* and CBaseY*
// CBaseX* 鍜?CBaseY*涔嬮棿鐨勮漿鎹?br /> CBaseX* pX = new CBaseX();
// Error, types pointed to are unrelated
// 閿欒錛?綾誨瀷鎸囧悜鏄棤鍏崇殑
// CBaseY* pY1 = static_cast<CBaseY*>(pX);
// Compile OK, but pY2 is not CBaseX
// 鎴愬姛緙栬瘧, 浣嗘槸 pY2 涓嶆槸CBaseX
CBaseY* pY2 = reinterpret_cast<CBaseY*>(pX);
// System crash!!
// 緋葷粺宕╂簝!!
// pY2->bar();
姝e鎴戜滑鍦ㄦ硾鍨嬩緥瀛愪腑鎵璁よ瘑鍒扮殑錛屽鏋滀綘灝濊瘯杞崲涓涓璞″埌鍙︿竴涓棤鍏崇殑綾籹tatic_cast<>灝嗗け璐ワ紝鑰宺einterpret_cast<>灝辨繪槸鎴愬姛鈥滄楠椻濈紪璇戝櫒錛氶偅涓璞″氨鏄偅涓棤鍏崇被銆?br />
鎯呭喌2錛氳漿鎹㈠埌鐩稿叧鐨勭被
      1. CDerived* pD = new CDerived();
2. printf("CDerived* pD = %x\n", (int)pD);
3.
4. // static_cast<> CDerived* -> CBaseY* -> CDerived*
//鎴愬姛緙栬瘧錛岄殣寮弒tatic_cast<>杞崲
5. CBaseY* pY1 = pD;
6. printf("CBaseY* pY1 = %x\n", (int)pY1);
// 鎴愬姛緙栬瘧, 鐜板湪 pD1 = pD
7. CDerived* pD1 = static_cast<CDerived*>(pY1);
8. printf("CDerived* pD1 = %x\n", (int)pD1);
9.
10. // reinterpret_cast
// 鎴愬姛緙栬瘧, 浣嗘槸 pY2 涓嶆槸 CBaseY*
11. CBaseY* pY2 = reinterpret_cast<CBaseY*>(pD);
12. printf("CBaseY* pY2 = %x\n", (int)pY2);
13.
14. // 鏃犲叧鐨?static_cast<>
15. CBaseY* pY3 = new CBaseY();
16. printf("CBaseY* pY3 = %x\n", (int)pY3);
// 鎴愬姛緙栬瘧,灝界 pY3 鍙槸涓涓?"鏂?CBaseY()"
17. CDerived* pD3 = static_cast<CDerived*>(pY3);
18. printf("CDerived* pD3 = %x\n", (int)pD3);
      ---------------------- 杈撳嚭 ---------------------------
CDerived* pD = 392fb8
CBaseY* pY1 = 392fbc
CDerived* pD1 = 392fb8
CBaseY* pY2 = 392fb8
CBaseY* pY3 = 390ff0
CDerived* pD3 = 390fec

娉ㄦ剰錛氬湪灝咰Derived*鐢ㄩ殣寮?static_cast<>杞崲鍒癈BaseY*錛堢5琛岋級鏃訛紝緇撴灉鏄紙鎸囧悜錛塁Derived*錛堢殑鎸囬拡鍚戝悗錛?鍋忕Щ浜?錛堜釜瀛楄妭錛夛紙璇戞敞錛?涓篿nt綾誨瀷鍦ㄥ唴瀛樹腑鎵鍗犲瓧鑺傛暟錛夈備負浜嗙煡閬搒tatic_cast<> 瀹為檯濡備綍錛屾垜浠笉寰椾笉瑕佹潵鐪嬩竴涓婥Derived鐨勫唴瀛樺竷灞銆?/p>

CDerived鐨勫唴瀛樺竷灞錛圡emory Layout錛?/strong>



濡傚浘鎵紺猴紝CDerived鐨勫唴瀛樺竷灞鍖呮嫭涓や釜瀵硅薄錛孋BaseX 鍜?CBaseY錛岀紪璇戝櫒涔熺煡閬撹繖涓鐐廣傚洜姝わ紝褰撲綘灝咰Derived* 杞崲鍒?CBaseY*鏃訛紝瀹冪粰鎸囬拡娣誨姞4涓瓧鑺傦紝鍚屾椂褰撲綘灝咰BaseY*杞崲鍒癈Derived*鏃訛紝瀹冪粰鎸囬拡鍑忓幓4銆傜劧鑰岋紝鐢氳嚦瀹冨嵆渚夸笉鏄竴涓狢Derived浣犱篃鍙互榪欐牱鍋氥?br />褰撶劧錛岃繖涓棶棰樺彧鍦ㄥ鏋滀綘鍋氫簡澶氱戶鎵挎椂鍙戠敓銆傚湪浣犲皢CDerived杞崲 鍒?CBaseX鏃秙tatic_cast<> 鍜?reinterpret_cast<>鏄病鏈夊尯鍒殑銆?br />
鎯呭喌3錛歷oid*涔嬮棿鐨勫悜鍓嶅拰鍚戝悗杞崲

鍥犱負浠諱綍鎸囬拡鍙互琚漿鎹㈠埌void*錛岃寁oid*鍙互琚悜鍚庤漿鎹㈠埌浠諱綍鎸囬拡錛堝浜巗tatic_cast<> 鍜?reinterpret_cast<>杞崲閮藉彲浠ヨ繖鏍峰仛錛夛紝濡傛灉娌℃湁灝忓績澶勭悊鐨勮瘽閿欒鍙兘鍙戠敓銆?br />

    CDerived* pD = new CDerived();
printf("CDerived* pD = %x\n", (int)pD);

CBaseY* pY = pD; // 鎴愬姛緙栬瘧, pY = pD + 4
printf("CBaseY* pY = %x\n", (int)pY);

void* pV1 = pY; //鎴愬姛緙栬瘧, pV1 = pY
printf("void* pV1 = %x\n", (int)pV1);

// pD2 = pY, 浣嗘槸鎴戜滑棰勬湡 pD2 = pY - 4
CDerived* pD2 = static_cast<CDerived*>(pV1);
printf("CDerived* pD2 = %x\n", (int)pD2);
// 緋葷粺宕╂簝
// pD2->bar();

        ---------------------- 杈撳嚭 ---------------------------
CDerived* pD = 392fb8
CBaseY* pY = 392fbc
void* pV1 = 392fbc
CDerived* pD2 = 392fbc

涓鏃︽垜浠凡緇忚漿鎹㈡寚閽堜負void*錛屾垜浠氨涓嶈兘杞繪槗灝嗗叾杞崲鍥炲師綾匯傚湪涓婇潰鐨勪緥瀛愪腑錛屼粠涓涓獀oid* 榪斿洖CDerived*鐨勫敮涓鏂規硶鏄皢鍏惰漿鎹負CBaseY*鐒跺悗鍐嶈漿鎹負CDerived*銆?
浣嗘槸濡傛灉鎴戜滑涓嶈兘紜畾瀹冩槸CBaseY* 榪樻槸 CDerived*錛岃繖鏃舵垜浠笉寰椾笉鐢╠ynamic_cast<> 鎴杢ypeid[2]銆?br />
娉ㄩ噴錛?/strong>
1. dynamic_cast<>錛屼粠鍙︿竴鏂歸潰鏉ヨ錛屽彲浠ラ槻姝竴涓硾鍨婥BaseY* 琚漿鎹㈠埌CDerived*銆?br />2. dynamic_cast<>闇瑕佺被鎴愪負澶氭侊紝鍗沖寘鎷滆櫄鈥濆嚱鏁幫紝騫跺洜姝よ屼笉鑳芥垚涓簐oid*銆?br />鍙傝冿細
1. [MSDN] C++ Language Reference -- Casting
2. Nishant Sivakumar, Casting Basics - Use C++ casts in your VC++.NET programs
3. Juan Soulie, C++ Language Tutorial: Type Casting



]]>
C/C++ 鍐呭瓨綆$悊 Heap vs Stackhttp://www.shnenglu.com/ace/archive/2006/05/17/7313.htmlStone JiangStone JiangWed, 17 May 2006 09:09:00 GMThttp://www.shnenglu.com/ace/archive/2006/05/17/7313.htmlhttp://www.shnenglu.com/ace/comments/7313.htmlhttp://www.shnenglu.com/ace/archive/2006/05/17/7313.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/7313.htmlhttp://www.shnenglu.com/ace/services/trackbacks/7313.html 杞敞:
聽聽聽 浠婂ぉ鏈夌綉鍙嬮棶鍒拌繖涓棶棰?浜庢槸鍦ㄧ綉涓婃悳绱簡涓涓?杞創榪欐.
鐩鎬技鐨勫お澶氫簡,鍑哄涓嶈.鍦ㄦ鎰熻阿鍘熶綔鑰呯簿褰╄瑙?


涓銆侀澶囩煡璇嗏旂▼搴忕殑鍐呭瓨鍒嗛厤
涓涓敱c/C++緙栬瘧鐨勭▼搴忓崰鐢ㄧ殑鍐呭瓨鍒嗕負浠ヤ笅鍑犱釜閮ㄥ垎
1銆佹爤鍖猴紙stack錛夆斅犵敱緙栬瘧鍣ㄨ嚜鍔ㄥ垎閰嶉噴鏀韭狅紝瀛樻斁鍑芥暟鐨勫弬鏁板鹼紝灞閮ㄥ彉閲忕殑鍊肩瓑銆傚叾鎿嶄綔鏂瑰紡綾諱技浜庢暟鎹粨鏋勪腑鐨勬爤銆?
2銆佸爢鍖猴紙heap錛壜犫斅犱竴鑸敱紼嬪簭鍛樺垎閰嶉噴鏀撅紝聽鑻ョ▼搴忓憳涓嶉噴鏀撅紝紼嬪簭緇撴潫鏃跺彲鑳界敱OS鍥炴敹聽銆傛敞鎰忓畠涓庢暟鎹粨鏋勪腑鐨勫爢鏄袱鍥炰簨錛屽垎閰嶆柟寮忓掓槸綾諱技浜庨摼琛紝鍛靛懙銆?
3銆佸叏灞鍖猴紙闈欐佸尯錛夛紙static錛夆旓紝鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忕殑瀛樺偍鏄斁鍦ㄤ竴鍧楃殑錛屽垵濮嬪寲鐨勫叏灞鍙橀噺鍜岄潤鎬佸彉閲忓湪涓鍧楀尯鍩燂紝聽鏈垵濮嬪寲鐨勫叏灞鍙橀噺鍜屾湭鍒濆鍖栫殑闈欐佸彉閲忓湪鐩擱偦鐨勫彟涓鍧楀尯鍩熴偮?聽紼嬪簭緇撴潫鍚庢湁緋葷粺閲婃斁
4銆佹枃瀛楀父閲忓尯聽鈥斿父閲忓瓧絎︿覆灝辨槸鏀懼湪榪欓噷鐨勩偮犵▼搴忕粨鏉熷悗鐢辯郴緇熼噴鏀?
5銆佺▼搴忎唬鐮佸尯鈥斿瓨鏀懼嚱鏁頒綋鐨勪簩榪涘埗浠g爜銆?

浜屻佷緥瀛愮▼搴?
榪欐槸涓涓墠杈堝啓鐨勶紝闈炲父璇︾粏

//main.cpp聽
int聽a聽=0;聽鍏ㄥ眬鍒濆鍖栧尯聽
char*p1;聽鍏ㄥ眬鏈垵濮嬪寲鍖郝?br />main()聽
{聽
int聽b;//聽鏍埪?/span>
char聽s[]聽="abc";聽//鏍埪?/span>
char*p2;聽//鏍埪?/span>
char*p3聽="123456";聽123456\0";//鍦ㄥ父閲忓尯錛宲3鍦ㄦ爤涓娿偮?/span>
staticint聽c聽=0錛浡?/span>//鍏ㄥ眬錛堥潤鎬侊級鍒濆鍖栧尯聽
p1聽=聽(char*)malloc(10);聽
p2聽
=聽(char*)malloc(20);聽
//鍒嗛厤寰楁潵寰?0鍜?0瀛楄妭鐨勫尯鍩熷氨鍦ㄥ爢鍖恒偮?/span>
strcpy(p1,聽"123456");聽//123456\0鏀懼湪甯擱噺鍖猴紝緙栬瘧鍣ㄥ彲鑳戒細灝嗗畠涓巔3鎵鎸囧悜鐨?123456"浼樺寲鎴愪竴涓湴鏂廣偮?/span>
}
聽聽

涓夈佸爢鍜屾爤鐨勭悊璁虹煡璇?
3.1鐢寵鏂瑰紡
stack:
鐢辯郴緇熻嚜鍔ㄥ垎閰嶃偮犱緥濡傦紝澹版槑鍦ㄥ嚱鏁頒腑涓涓眬閮ㄥ彉閲徛爄nt聽b;聽緋葷粺鑷姩鍦ㄦ爤涓負b寮杈熺┖闂?
heap:
闇瑕佺▼搴忓憳鑷繁鐢寵錛屽茍鎸囨槑澶у皬錛屽湪c涓璵alloc鍑芥暟
濡俻1聽=聽(char聽*)malloc(10);
鍦–++涓敤new榪愮畻絎?
濡俻2聽=聽(char聽*)malloc(10);
浣嗘槸娉ㄦ剰p1銆乸2鏈韓鏄湪鏍堜腑鐨勩?
3.2 鐢寵鍚庣郴緇熺殑鍝嶅簲
鏍堬細鍙鏍堢殑鍓╀綑絀洪棿澶т簬鎵鐢寵絀洪棿錛岀郴緇熷皢涓虹▼搴忔彁渚涘唴瀛橈紝鍚﹀垯灝嗘姤寮傚父鎻愮ず鏍堟孩鍑恒?
鍫嗭細棣栧厛搴旇鐭ラ亾鎿嶄綔緋葷粺鏈変竴涓褰曠┖闂插唴瀛樺湴鍧鐨勯摼琛紝褰撶郴緇熸敹鍒扮▼搴忕殑鐢寵鏃訛紝
浼氶亶鍘嗚閾捐〃錛屽鎵劇涓涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡皢璇ョ粨鐐逛粠絀洪棽緇撶偣閾捐〃涓垹闄わ紝騫跺皢璇ョ粨鐐圭殑絀洪棿鍒嗛厤緇欑▼搴忥紝鍙﹀錛屽浜庡ぇ澶氭暟緋葷粺錛屼細鍦ㄨ繖鍧楀唴瀛樼┖闂翠腑鐨勯鍦板潃澶勮褰曟湰嬈″垎閰嶇殑澶у皬錛岃繖鏍鳳紝浠g爜涓殑delete璇彞鎵嶈兘姝g‘鐨勯噴鏀炬湰鍐呭瓨絀洪棿銆傚彟澶栵紝鐢變簬鎵懼埌鐨勫爢緇撶偣鐨勫ぇ灝忎笉涓瀹氭濂界瓑浜庣敵璇風殑澶у皬錛岀郴緇熶細鑷姩鐨勫皢澶氫綑鐨勯偅閮ㄥ垎閲嶆柊鏀懼叆絀洪棽閾捐〃涓?
3.3鐢寵澶у皬鐨勯檺鍒?
鏍堬細鍦╓indows涓?鏍堟槸鍚戜綆鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄竴鍧楄繛緇殑鍐呭瓨鐨勫尯鍩熴傝繖鍙ヨ瘽鐨勬剰鎬濇槸鏍堥《鐨勫湴鍧鍜屾爤鐨勬渶澶у閲忔槸緋葷粺棰勫厛瑙勫畾濂界殑錛屽湪聽WINDOWS涓嬶紝鏍堢殑澶у皬鏄?M錛堜篃鏈夌殑璇存槸1M錛屾諱箣鏄竴涓紪璇戞椂灝辯‘瀹氱殑甯告暟錛夛紝濡傛灉鐢寵鐨勭┖闂磋秴榪囨爤鐨勫墿浣欑┖闂存椂錛屽皢鎻愮ずoverflow銆傚洜姝わ紝鑳戒粠鏍堣幏寰楃殑絀洪棿杈冨皬銆?
鍫嗭細鍫嗘槸鍚戦珮鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄笉榪炵畫鐨勫唴瀛樺尯鍩熴傝繖鏄敱浜庣郴緇熸槸鐢ㄩ摼琛ㄦ潵瀛樺偍鐨勭┖闂插唴瀛樺湴鍧鐨勶紝鑷劧鏄笉榪炵畫鐨勶紝鑰岄摼琛ㄧ殑閬嶅巻鏂瑰悜鏄敱浣庡湴鍧鍚戦珮鍦板潃銆傚爢鐨勫ぇ灝忓彈闄愪簬璁$畻鏈虹郴緇熶腑鏈夋晥鐨勮櫄鎷熷唴瀛樸傜敱姝ゅ彲瑙侊紝鍫嗚幏寰楃殑絀洪棿姣旇緝鐏墊椿錛屼篃姣旇緝澶с?
3.4鐢寵鏁堢巼鐨勬瘮杈冿細
鏍堢敱緋葷粺鑷姩鍒嗛厤錛岄熷害杈冨揩銆備絾紼嬪簭鍛樻槸鏃犳硶鎺у埗鐨勩?
鍫嗘槸鐢眓ew鍒嗛厤鐨勫唴瀛橈紝涓鑸熷害姣旇緝鎱紝鑰屼笖瀹規槗浜х敓鍐呭瓨紕庣墖,涓嶈繃鐢ㄨ搗鏉ユ渶鏂逛究.
鍙﹀錛屽湪WINDOWS涓嬶紝鏈濂界殑鏂瑰紡鏄敤VirtualAlloc鍒嗛厤鍐呭瓨錛屼粬涓嶆槸鍦ㄥ爢錛屼篃涓嶆槸鍦ㄦ爤鏄洿鎺ュ湪榪涚▼鐨勫湴鍧絀洪棿涓繚鐣欎竴蹇唴瀛橈紝铏界劧鐢ㄨ搗鏉ユ渶涓嶆柟渚褲備絾鏄熷害蹇紝涔熸渶鐏墊椿
3.5鍫嗗拰鏍堜腑鐨勫瓨鍌ㄥ唴瀹?
鏍堬細聽鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛岀涓涓繘鏍堢殑鏄富鍑芥暟涓悗鐨勪笅涓鏉℃寚浠わ紙鍑芥暟璋冪敤璇彞鐨勪笅涓鏉″彲鎵ц璇彞錛夌殑鍦板潃錛岀劧鍚庢槸鍑芥暟鐨勫悇涓弬鏁幫紝鍦ㄥぇ澶氭暟鐨凜緙栬瘧鍣ㄤ腑錛屽弬鏁版槸鐢卞彸寰宸﹀叆鏍堢殑錛岀劧鍚庢槸鍑芥暟涓殑灞閮ㄥ彉閲忋傛敞鎰忛潤鎬佸彉閲忔槸涓嶅叆鏍堢殑銆?
褰撴湰嬈″嚱鏁拌皟鐢ㄧ粨鏉熷悗錛屽眬閮ㄥ彉閲忓厛鍑烘爤錛岀劧鍚庢槸鍙傛暟錛屾渶鍚庢爤欏舵寚閽堟寚鍚戞渶寮濮嬪瓨鐨勫湴鍧錛屼篃灝辨槸涓誨嚱鏁頒腑鐨勪笅涓鏉℃寚浠わ紝紼嬪簭鐢辮鐐圭戶緇繍琛屻?
鍫嗭細涓鑸槸鍦ㄥ爢鐨勫ご閮ㄧ敤涓涓瓧鑺傚瓨鏀懼爢鐨勫ぇ灝忋傚爢涓殑鍏蜂綋鍐呭鏈夌▼搴忓憳瀹夋帓銆?
3.6瀛樺彇鏁堢巼鐨勬瘮杈?

char聽s1[]聽=聽"aaaaaaaaaaaaaaa";
char聽*s2聽=聽"bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa鏄湪榪愯鏃跺埢璧嬪肩殑錛?
鑰宐bbbbbbbbbb鏄湪緙栬瘧鏃跺氨紜畾鐨勶紱
浣嗘槸錛屽湪浠ュ悗鐨勫瓨鍙栦腑錛屽湪鏍堜笂鐨勬暟緇勬瘮鎸囬拡鎵鎸囧悜鐨勫瓧絎︿覆(渚嬪鍫?蹇?
姣斿錛?
#include聽<stdio.h>;聽
void聽main()聽
{聽
char聽a聽=1;聽
char聽c[]聽="1234567890";聽
char*p聽="1234567890";聽
a聽
=聽c[1];聽
a聽
=聽p[1];聽
return;聽
}聽

瀵瑰簲鐨勬眹緙栦唬鐮?
10:聽a聽=聽c[1];聽
00401067聽8A聽4D聽F1聽mov聽cl,byte聽ptr聽[ebp-0Fh]聽
0040106A聽88聽4D聽FC聽mov聽byte聽ptr聽[ebp-4],cl聽
11:聽a聽=聽p[1];聽
0040106D聽8B聽55聽EC聽mov聽edx,dword聽ptr聽[ebp-14h]聽
00401070聽8A聽42聽01聽mov聽al,byte聽ptr聽[edx+1]聽
00401073聽88聽45聽FC聽mov聽byte聽ptr聽[ebp-4],al聽

絎竴縐嶅湪璇誨彇鏃剁洿鎺ュ氨鎶婂瓧絎︿覆涓殑鍏冪礌璇誨埌瀵勫瓨鍣╟l涓紝鑰岀浜岀鍒欒鍏堟妸鎸囬拡鍊艱鍒癳dx涓紝鍦ㄦ牴鎹甧dx璇誨彇瀛楃錛屾樉鐒舵參浜嗐?


3.7灝忕粨錛?
鍫嗗拰鏍堢殑鍖哄埆鍙互鐢ㄥ涓嬬殑姣斿柣鏉ョ湅鍑猴細
浣跨敤鏍堝氨璞℃垜浠幓楗閲屽悆楗紝鍙鐐硅彍錛堝彂鍑虹敵璇鳳級銆佷粯閽便佸拰鍚冿紙浣跨敤錛夛紝鍚冮ケ浜嗗氨璧幫紝涓嶅繀鐞嗕細鍒囪彍銆佹礂鑿滅瓑鍑嗗宸ヤ綔鍜屾礂紕椼佸埛閿呯瓑鎵熬宸ヤ綔錛屼粬鐨勫ソ澶勬槸蹇嵎錛屼絾鏄嚜鐢卞害灝忋?
浣跨敤鍫嗗氨璞℃槸鑷繁鍔ㄦ墜鍋氬枩嬈㈠悆鐨勮彍鑲達紝姣旇緝楹葷儲錛屼絾鏄瘮杈冪鍚堣嚜宸辯殑鍙e懗錛岃屼笖鑷敱搴﹀ぇ銆?

鍫嗗拰鏍堢殑鍖哄埆涓昏鍒嗭細
鎿嶄綔緋葷粺鏂歸潰鐨勫爢鍜屾爤錛屽涓婇潰璇寸殑閭d簺錛屼笉澶氳浜嗐?
榪樻湁灝辨槸鏁版嵁緇撴瀯鏂歸潰鐨勫爢鍜屾爤錛岃繖浜涢兘鏄笉鍚岀殑姒傚康銆傝繖閲岀殑鍫嗗疄闄呬笂鎸囩殑灝辨槸錛堟弧瓚沖爢鎬ц川鐨勶級浼樺厛闃熷垪鐨勪竴縐嶆暟鎹粨鏋勶紝絎?涓厓绱犳湁鏈楂樼殑浼樺厛鏉冿紱鏍堝疄闄呬笂灝辨槸婊¤凍鍏堣繘鍚庡嚭鐨勬ц川鐨勬暟瀛︽垨鏁版嵁緇撴瀯銆?
铏界劧鍫嗘爤錛屽爢鏍堢殑璇存硶鏄繛璧鋒潵鍙紝浣嗘槸浠栦滑榪樻槸鏈夊緢澶у尯鍒殑錛岃繛鐫鍙彧鏄敱浜庡巻鍙茬殑鍘熷洜銆?br />


]]>
閬垮厤渚濊禆鐨勬秷鎭鐞嗘柟寮?(璇曡瘧)http://www.shnenglu.com/ace/archive/2006/05/04/6629.htmlStone JiangStone JiangThu, 04 May 2006 12:52:00 GMThttp://www.shnenglu.com/ace/archive/2006/05/04/6629.htmlhttp://www.shnenglu.com/ace/comments/6629.htmlhttp://www.shnenglu.com/ace/archive/2006/05/04/6629.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/6629.htmlhttp://www.shnenglu.com/ace/services/trackbacks/6629.html閬垮厤渚濊禆鐨勬秷鎭鐞嗘柟寮?br />
Anthony Williams
url: http://www.ddj.com/dept/cpp/184429055
璇戣? Stone Jiang
璇戣呰鏄庯細鏈漢榪樺湪瀛︿範鑻辨枃鐨勮繃紼嬩腑錛屾湁浜涘彞瀛愬緢闅捐瘧錛岃繖閲岀粰鍑哄師鏂囩殑閾炬帴錛屾榪庡氨鍏朵腑璇戝緱涓嶅噯紜殑鍦版柟涓庢垜浜ゆ崲鎰忚銆?br />

鍦ㄦ偍緇存姢瀹夊叏綾誨瀷鍜岄伩鍏嶉泦鎴愮數璺埇鍑芥暟鏃?浣犲彲浠ヤ嬌鐢–++鐨勫己澶х殑鍔涢噺榪涜娑堟伅浼犻掋?/p>

Anthony鏄疛ust Software Solution鏈夐檺鍏徃鐨勪竴浣嶈蔣浠跺紑鍙戣呭拰鎵ц綆$悊鑰呫傚彲浠ラ氳繃anthony@justsoftwaresolutions.co.uk涓庝箣鑱旂郴銆?/p>

浣跨敤閫氱敤鐨勬秷鎭紶閫掓柟寮忎紶閫掓暟鎹湪C++紼嬪簭涓緢鏅亶銆傝繖縐嶆妧鏈粡甯哥敤浜庡湪綰跨▼闂翠互鍙婁粠/鍒癎UI緇勪歡闂翠紶閫掓暟鎹備絾鏄秷鎭紶閫掍粛鐒跺緢闅懼疄鐜板緱鑹ソ錛岃繖鏄洜涓哄湪甯歌鐨勬秷鎭紶閫掓柟寮忎腑錛屾毚闇插嚭浜嗚繃澶氱殑钘曞悎銆佺己灝戠被鍨嬪畨鍏ㄥ拰闆嗘垚鐢佃礬鑸殑娑堟伅澶勭悊鍑芥暟銆?/p>

鍦ㄦ湰鏂囦腑錛屾垜鎻愬嚭浜嗕竴縐嶆妧鏈紝榪欑鎶鏈埄鐢–++鐨勫己澶у姏閲忔潵閬垮厤涓婅堪緙洪櫡鈥斺斿湪娑堟伅浼犻掍腑閬垮厤涓嶉傚綋鐨勮棔鍚堬紝緇存姢綾誨瀷瀹夊叏錛屼互鍙婃秷闄ら泦鎴愮數璺埇鐨勬秷鎭鐞嗗嚱銆? The only translation units that need to known the details of a message are those containning the source and handler functions for that specific message type.) 闇瑕佽漿鎹㈢殑鍗曞厓錛屽嵆闇瑕佺煡閬撶殑娑堟伅璇︾粏鍐呭鏄寘鍚簡鐗瑰畾娑堟伅鐨勭被鍨嬬殑婧愪唬鐮佸拰澶勭悊鍑芥暟銆?/p>

浼犵粺鎶鏈?/h2>


澶ф搴旂敤寰楁渶涓哄箍娉涚殑娑堟伅浼犻掓妧鏈槸浣跨敤涓涓甫鏈夌壒孌婃垚鍛樻潵琛ㄧず娑堟伅綾誨瀷鐨勭粨鏋勪綋錛岃娑堟伅綾誨瀷鏄秷鎭殑鏍囪瘑銆傝繖縐嶆柟寮忚騫挎硾搴旂敤褰掑拵浜庝嬌鐢ㄤ簡鍩轟簬C鐨凙PI錛屾瘮濡俋11鍜孧icrosoft Windows銆傚湪榪欑鏂規硶涓紝娑堟伅緇撴瀯浣撲腑瑕佷箞鏈変竴涓氱敤鐨勫瓧浣撶敤浜庡尯鍒笉鍚屾秷鎭殑鎰忎箟錛岃繖涓瓧孌靛彲琚墍鏈夋秷鎭噸鐢紝鎴栬呭畠鏄洿澶х粨鏋勭殑絎竴涓垚鍛橈紝瀹冪殑綾誨瀷鐢辯被鍨嬩唬鐮佹潵紜畾銆俉indows API浣跨敤鍓嶉潰鐨勬妧鏈紝鑰孹11浣跨敤鍚庨潰鐨勬柟娉曘傛棤璁虹敤鍝鏂瑰紡錛屽鐞嗘秷鎭殑浠g爜閮介』媯鏌ョ被鍨嬬紪鐮侊紝鐢ㄤ互鍐沖畾鎬庝箞澶勭悊璇ユ秷鎭?/p>

榪欎簺鎶鏈殑闂鏄?緙轟箯綾誨瀷瀹夊叏錛岄泦鎴愮數璺埇鐨勫鐞嗗嚱鏁幫紝闇瑕佺鐞嗙被鍨嬬紪鐮佹潵紜繚娑堟伅鍞竴鎬х殑閫傚綋灞傛銆傜壒鍒殑錛岀己涔忕被鍨嬪畨鍏ㄦ剰鍛崇潃浣跨敤涔嬪墠錛屼嬌鐢ㄤ唬鐮佸繀欏繪妸娑堟伅鏁版嵁杞崲鎴愰傚綋鐨勭被鍨嬨傝繖涓姝ユ槸鏋佹槗鍑洪敊鐨勶紝灝ゅ叾鍦ㄥ綋澶嶅埗鍜岀矘璐翠唬鐮佹椂(榪欑闈炲父鐨勬墜孌靛父鍙戠敓鍦ㄤ負澶勭悊鐩鎬技娑堟伅緙栧啓浠g爜鐨勬椂鍊?錛岀紪璇戝櫒涓嶄細鍦ㄨ繖縐嶉敊璇粰鍑轟換浣曡鍛娿?/p>

緙轟箯綾誨瀷瀹夊叏榪樻湁涓涓澶栫殑闂鈥斺斿嵆瀹冧笉鍙兘綆鍗曟湁鏁堢殑閫氳繃娑堟伅緋葷粺浼犻掕祫婧愭垨鍙橀暱鐨勬暟鎹紝 榪欐槸鍥犱負娑堟伅鐨勫彂閫佹柟鎬繪槸涓嶈兘鐭ラ亾浣曟椂錛堟垨鏄惁錛夎娑堟伅宸茶澶勭悊榪囦簡銆?/p>

鍦ㄨ繖閮ㄥ垎錛岄泦鎴愮數璺埇鐨勬秷鎭鐞嗗嚱鏁版槸蹇呴』鐢ㄤ簬紜畾娑堟伅綾誨瀷鐨勪駭鐗╋紝閫氳繃宸叉帴鏀剁殑娑堟伅鏉ユ秷鎭被鍨嬶紝鐒跺悗寰楀埌濡備綍澶勭悊瀹冪殑鏂瑰紡銆傝繖縐嶅鐞嗗嚱鏁板線寰瀹炵幇涓轟竴涓緢澶х殑switch璇彞鎴栨槸涓涓瞚f eles if銆備竴浜涙鏋訛紝濡侻FC錛屾彁渚涗竴浜涘畯鏉ュ噺寮辮繖縐嶉棶棰樼殑褰卞搷錛屽畠榪欎笉鑳藉畬鍏ㄦ秷闄よ繖涓棶棰樸?/p>

鏈鍚庣殑闂鏄鐞嗙被鍨嬩唬鐮併傚畠蹇呴』瑕佹眰鎺ユ敹娑堟伅浠g爜娓呮鍦扮煡閬撴槸鍝竴涓秷鎭紝浠ヤ究浜庢紜殑澶勭悊瀹冦傛墍浠ワ紝綾誨瀷浠g爜闇瑕佸湪澶勭悊瀹冪殑鐩稿叧浠g爜涓‘淇濆敮涓鎬с傛瘮濡傦紝鍦╓indows API涓紝鎸囧畾鑼冨洿鐨勬秷鎭被鍨嬪湪涓嶅悓鐨勫簲鐢ㄧ▼搴忎腑浠h〃涓嶅悓鐨勬剰涔夛紝騫朵笖錛屽湪鍚屼竴涓簲灝辯敤紼嬪簭涓紝鍏跺畠鑼冨洿鐨勬秷鎭被鍨嬪湪涓嶅悓紿楀彛鎴朑UI緇勪歡涓唬琛ㄤ笉鍚岀殑鎰忎箟銆?閫氬父,闇瑕佹墍鏈夌被鍨嬩唬鐮佺殑鍒楄〃錛岃鍒楄〃瑕佹眰鍦ㄧ粰瀹氱殑鑼冨洿涓繚鎸佸敮涓錛屼互渚夸簬媯鏌ュ畠浠殑鍞竴鎬с傚垪琛ㄥ父甯告槸浠ュご鏂囦歡鐨勫艦寮忕粰鍑猴紝澶存枃浠朵腑瀹氫箟浜嗙被鍨嬩唬鐮侊紝鍖呭惈鍦ㄩ渶瑕佺煡閬撴秷鎭被鍨嬬殑鎵鏈夊湴鏂廣傝繖縐嶆柟寮忓鏄撳鑷村簲鐢ㄧ▼搴忎笉鍚岄儴鍒嗕箣闂寸殑钘曞悎,鑰岃繖浜涢儴鍒嗕箣闂村嵈娌℃湁浠諱綍鍏崇郴銆傜敱浜庤繖縐嶈繃搴︾殑钘曪紝綆鍗曠殑鍙樻洿瀵艱嚧榪囧鐨勯噸鏂扮紪璇戙?/p>

闈㈠悜瀵硅薄鎶鏈?br />
瀵硅薄鎶鏈殑涓涓父瑙佺壒寰佹槸鎵鏈夌浉鍏蟲秷鎭被媧劇敓鑷竴涓氱敤鐨勫熀綾匯傝鐗瑰緛鐢ㄧ紪璇戝櫒鑳借璇嗙殑鐪熷疄綾誨瀷浠f浛浜嗘樉寮忕殑綾誨瀷浠g爜銆備笉浠呭姝わ紝瀹冭繕鏈変簡涓涓噸瑕佺殑錛岃秴瓚奀椋庢牸鎶鏈殑浼樼偣鈥斺旂被鍨嬪畨鍏ㄣ傚畠鎻愪緵鐨勯氱敤鍩虹被鐨勬瀽鏋勫嚱鏁版槸铏氬嚱鏁幫紝鎵浠ユ淳鐢熺殑娑堟伅綾昏兘鑷敱鍦扮鐞嗚祫婧愶紝濡傚彉闀跨殑鏁版嵁錛岃繖浜涙暟鎹彲浠ュ湪鏋愭瀯鍑芥暟涓噴鏀俱備粎鏈夌殑闇姹傛槸鎺ュ彈娑堟伅鐨勪唬鐮佽兘姝g‘鍦伴攢姣佹秷鎭璞★紝鏃犺瀹冧滑鏄惁琚鐞嗐?/p>

綆$悊綾誨瀷浠g爜鐜板湪琚浛鎹負綆$悊綾匯傝繖鏄竴涓洿鍔犵畝鍗曠殑浠誨姟錛岀敱浜庡彲鑳界殑娑堟伅鍚嶅瓧鐨勮寖鍥存槸娌℃湁闄愬埗鐨勶紝鍙兘瀛樺湪鍚嶅瓧鍐茬獊錛屼絾榪欎竴鐐瑰彲浠ラ氳繃鍚嶅瓧絀洪棿鏉ヨВ鍐熾?/p>

淇濇寔綆鍗?/font>

鏈綆鍗曠殑OOP鎶鏈氨鏄敤dynamic_cast媯鏌ュ疄闄呯殑娑堟伅綾誨瀷浠f浛媯鏌ユ秷鎭紪鐮併傜劧鑰岋紝榪欎緷鐒墮潰涓寸潃闆嗘垚鐢佃礬鑸湴娑堟伅澶勭悊鏂瑰紡鈥斺旂幇鍦ㄩ氳繃鍖呮嫭dynamic_cast鐨勬瘮杈冮摼涔熶紭浜庨氳繃綾誨瀷緙栫爜瀛楁姣旇緝閾俱傚鍒楄〃1:

void 聽handleMessage(Message * 聽message)
{
聽聽聽聽
if (Message1 * 聽m = dynamic_cast < Message1 *> (message))
聽聽聽聽
{
聽聽聽聽聽聽聽聽handleMessage1(m);
聽聽聽聽}

聽聽聽聽
else if (Message2 * 聽m = dynamic_cast < Message2 *> (message))
聽聽聽聽
{
聽聽聽聽聽聽聽聽handleMessage2(m);
聽聽聽聽}

聽聽聽聽
//
}

[鍒楄〃1]

涓鑸岃█錛岀敱浜庝粎浠呮槸娑堟伅鐨勬簮浠g爜鍜屾帴鍙楁秷鎭殑婧愪唬鐮侀渶姹傜煡閬撶浉鍏崇殑娑堟伅錛屾墍浠ヤ緷璧栧緱鍒伴檷浣庛傜劧鍚庯紝闆嗘垚鐢佃礬鑸湴澶勭悊鍑芥暟鐜板湪闇瑕佺煡閬撴秷鎭殑鏈夊叧緇嗚妭錛屾墍浠ynamic_cast闇瑕佹秷鎭殑瀹屾暣瀹氫箟鈥斺斿鏋滃垎媧劇粰鍙﹀鐨勫嚱鏁板鐞嗗疄闄呯殑娑堟伅錛孋椋庢牸鎶鏈殑澶勭悊鍑芥暟涓嶉渶姹傜煡閬撴秷鎭殑緇嗚妭銆?/p>

鍙岄噸鍒嗘淳

(Direct testing of a class's type using dynamic_cast is generally indicative of a design problem;)綾葷殑綾誨瀷鐢╠ynamic_cast鐨勭洿嫻嬭瘯涓鑸彲琛ㄧず涓鴻璁¢棶棰?鐒惰岋紝綆鍗曞湴鎶婅櫄鍑芥暟鏀懼湪娑堟伅綾諱腑璧蜂笉鍒頒換浣曚綔鐢ㄢ斺斿畠灝嗘妸娑堟伅澶勭悊涓庢秷鎭紶緇曞湪涓璧鳳紝榪欎釜娑堟伅浣垮湪絎竴涓湴鏂瑰彂閫佹秷鎭殑鐩殑澶辮觸銆?/p>

鍙岄噸鍒嗘淳鐨勫叧閿偣鏄紝鍦ㄦ秷鎭被涓殑铏氬嚱鏁板甫鏈変竴涓綔涓哄弬鏁扮殑澶勭悊鍣紝鐒跺悗鍦ㄥ鐞嗗櫒涓婃妸鑷凡浣滀負鍙傛暟浼犻掍紶閫掔粰鍙︿竴涓嚱鏁板茍瀹屾垚璋冪敤銆傚洜涓鴻繖閲岀殑絎簩嬈″埌澶勭悊鍣ㄧ殑鍥炶皟宸茬粡鍦ㄥ疄闄呯殑媧劇敓綾諱腑瀹屾垚錛屾墍浠ョ湡瀹炵殑娑堟伅綾誨瀷宸茬粡鐭ラ亾錛屽湪澶勭悊鍣ㄤ笂鑳借皟鐢ㄩ傚綋鐨勫嚱鏁幫紝鏃犺榪欎釜鍑芥暟鏄氳繃閲嶈澆鐨勬柟寮忓疄鐜拌繕鏄彟澶栫嫭绔嬪懡鍚嶇殑鍑芥暟鏉ュ疄鐜?鍒楄〃2)銆?/p>

class 聽Message
{
public :
聽聽聽聽
virtual void 聽dispatch(MessageHandler * 聽handler) = 0 ;
};
class 聽Message1:
聽聽聽聽
public 聽Message
{
聽聽聽聽
void 聽dispatch(MessageHandler * 聽handler)
聽聽聽聽{
聽聽聽聽聽聽聽聽handler
-> process( this );
聽聽聽聽}
};
class 聽Message2:
聽聽聽聽
public 聽Message
{
聽聽聽聽
void 聽dispatch(MessageHandler * 聽handler)
聽聽聽聽{
聽聽聽聽聽聽聽聽handler
-> process( this );
聽聽聽聽}
};
// 聽other聽message聽classes
class 聽MessageHandler
{
聽聽聽聽
void 聽process(Message1 * );
聽聽聽聽
void 聽process(Message2 * );
聽聽聽聽
// 聽overloads聽of聽process聽for聽other聽messages
};

[鍒楄〃2]

渚濊禆浜庨噸杞界殑鏂瑰紡鏉ュ尯鍒笉鍚岀殑娑堟伅鏈夊埄浜庡ぇ澶氭暟騫寵 鈥斺旂幇鍦ㄥ湪姣忎釜娑堟伅綾諱腑铏氬嚱鏁扮殑瀹炵幇鏂瑰紡鏄浉鍚岀殑錛屽鏋滈渶瑕侊紝鍙互閫氳繃瀹忔潵涓鑷村湴鍖呰錛屾垨閫氳繃浠庝竴涓秷鎭埌鍙︿竴涓秷鎭腑鐩存帴澶嶅埗錛屼笉浼氭湁鍑洪敊鐨勬満浼氥?/p>

鍙岄噸鍒嗘淳瀛樺湪涓涓己鐐光斺旈珮搴﹁棔鍚堛傜敱浜庨氳繃閲嶈澆鏂瑰紡鍦ㄥ鐞嗗櫒綾諱腑鐨勯夋嫨澶勭悊鍑芥暟錛屽湪娑堟伅綾諱腑铏氬嚱鏁扮殑瀹炵幇闇瑕佺煡閬撳鐞嗗櫒綾葷殑瀹氫箟鐨勫叏閮紝鍥犳蹇呴』娉ㄦ剰鍒板湪緋葷粺涓瘡涓叾瀹冪殑綾葷殑鍚嶅瓧銆備笉鍏夎繖浜涳紝濡傛灉瑕佹敮鎸佷笉鍚岀殑澶勭悊鍣ㄧ被錛屽鐞嗗嚱鏁板繀欏誨湪閫氱敤鐨勫鐞嗗櫒鐨勫熀綾諱腑澹版槑涓鴻櫄鍑芥暟錛屾墍浠ユ瘡涓鐞嗗櫒綾誨繀欏誨湪緋葷粺涓敞鎰忓埌鎵鏈夌殑娑堟伅綾誨瀷(鍒楄〃3)銆傚鍔犳垨鍒犻櫎涓涓秷鎭被鍨嬩細寮曡搗搴旂敤紼嬪簭澶ч儴鍒嗕唬鐮侀噸鏂扮紪璇戙?/p>

class 聽MessageHandler
{
聽聽聽聽
virtual void 聽process(Message1 * ) = 0 ;
聽聽聽聽
virtual void 聽process(Message2 * ) = 0 ;
聽聽聽聽
virtual void 聽process(Message3 * ) = 0 ;
聽聽聽聽
virtual void 聽process(Message4 * ) = 0 ;
聽聽聽聽
// 聽overloads聽of聽process聽for聽other聽messages
}
;
class 聽SpecificMessageHandler:
聽聽聽聽
public 聽MessageHandler
{
聽聽聽聽
void 聽process(Message1 * );
聽聽聽聽
void 聽process(Message2 * );
聽聽聽聽
void 聽process(Message3 * );
聽聽聽聽
void 聽process(Message4 * );
聽聽聽聽
// 聽overloads聽of聽process聽for聽other聽messages
}
;
class 聽OtherSpecificMessageHandler:
聽聽聽聽
public 聽MessageHandler
{
聽聽聽聽
void 聽process(Message1 * );
聽聽聽聽
void 聽process(Message2 * );
聽聽聽聽
void 聽process(Message3 * );
聽聽聽聽
void 聽process(Message4 * );
聽聽聽聽
// 聽overloads聽of聽process聽for聽other聽messages
}
;

[鍒楄〃3]

鍔ㄦ佸弻閲嶅垎媧?br />
錛圛t was against this backdrop that I developed the technique I call "Dynamic Double Dispatch."錛夋垜寮鍙戜簡涓縐嶆妧鏈紝鎴戠О鍏朵負鈥滃姩鎬佸弻閲嶅垎媧鋸濓紝榪欑鎶鏈敤浜庤В鍐充笂榪伴棶棰樸傚敖綆℃湁鍩烘湰鐨勫弻閲嶅垎媧炬妧鏈紝浣嗛夋嫨鐨勬秷鎭鐞嗗嚱鏁頒嬌鐢ㄧ殑鏄湪緙栬瘧闃舵紜畾鐨勯噸杞芥妧鏈?灝界鍙戠幇鍦ㄦ紜殑娑堟伅澶勭悊鍣ㄧ被涓殑瀹炵幇鏄嬌鐢ㄨ櫄鍑芥暟鏈哄埗),鑰屽姩鎬佸弻閲嶅垎媧炬槸鍦ㄨ繍琛屾椂媯鏌ュ湪澶勭悊鍣ㄤ笂閫傚綋鐨勫鐞嗗嚱鏁扮殑銆傜粨璁烘槸鍔ㄦ佸弻閲嶅垎媧炬秷闄や簡鍙岄噸鍒嗘淳鐨勪緷璧栭棶棰樸傛秷鎭被鍨嬩笉鍦ㄩ渶瑕佹敞鎰忓埌鍏跺畠鐨勬秷鎭被鍨嬶紝騫朵笖澶勭悊鍣ㄧ被浠呴渶瑕佹敞鎰忓埌瀹冪殑瀹冭澶勭悊鐨勬秷鎭?/p>

鍔ㄦ佹鏌ョ殑鍏抽敭鐐規槸錛氭瘡涓涓秷鎭被鍨嬫湁涓涓嫭绔嬬殑鍩虹被鈥斺斿鐞嗗櫒綾諱粠閫傚綋鐨勶紝璁捐涓哄鐞嗘秷鎭殑鍩虹被媧劇敓銆傜劧鍚庡湪姣忎釜娑堟伅綾諱腑鐨勫垎媧懼嚱鏁拌兘鐢╠ynamic_cast鏉ユ鏌ヤ粠姝f淳鍩虹被媧劇敓鐨勫鐞嗗櫒綾伙紝鍥犺屽疄鐜頒簡姝g‘鐨勫鐞嗗嚱鏁般?鍒楄〃4)

class 聽MessageHandlerBase
{};
class 聽Message1HandlerBase:
聽聽聽聽
public virtual 聽MessageHandlerBase
{
聽聽聽聽
virtual void 聽process(Message1 * ) = 0 ;
};
class 聽Message1
{
聽聽聽聽
void 聽dispatch(MessageHandlerBase * 聽handler)
聽聽聽聽{
聽聽聽聽聽聽聽聽dynamic_cast
< Message1HandlerBase &> ( * handler).process( this );
聽聽聽聽}
};
class 聽Message2HandlerBase:
聽聽聽聽
public virtual 聽MessageHandlerBase
{
聽聽聽聽
virtual void 聽process(Message2 * ) = 0 ;
};
class 聽Message2:
聽聽聽聽
public 聽MessageBase
{
聽聽聽聽
void 聽dispatch(MessageHandlerBase * 聽handler)
聽聽聽聽{
聽聽聽聽聽聽聽聽dynamic_cast
< Message2HandlerBase &> ( * handler).process( this );
聽聽聽聽}
};
//
class 聽SpecificMessageHandler:
聽聽聽聽
public 聽Message1HandlerBase,
聽聽聽聽
public 聽Message2HandlerBase
{
聽聽聽聽
void 聽process(Message1 * );
聽聽聽聽
void 聽process(Message2 * );
};
class 聽OtherSpecificMessageHandler:
聽聽聽聽
public 聽Message3HandlerBase,
聽聽聽聽
public 聽Message4HandlerBase
{
聽聽聽聽
void 聽process(Message3 * );
聽聽聽聽
void 聽process(Message4 * );
};

[鍒楄〃4]

(Of course, having a completely separate handler base class for each message type would add excessive complication, as the dispatch function for each message type would now be specific to that message type, and the base classes would have to be written separately, despite being fundamentally the same, except for the message type they referenced.)
璇氱劧錛屼負姣忎釜娑堟伅綾誨瀷鍒嗗埆緙栧啓鐨勫鐞嗗櫒鍩虹被灝嗗鍔犺繃澶氱殑澶嶆潅鎬э紝鍚屾牱鍦幫紝姣忎釜娑堟伅綾誨瀷鍚勮嚜鐨勫垎媧懼嚱鏁扮幇鍦ㄩ渶瑕佺壒鍒寚瀹氾紝鍩虹被涔熼渶姹傚垎鍒紪鍐?鐒跺悗闄や簡瀹冧滑寮曠敤鐨勬秷鎭被鍨嬪鍩虹鏄浉鍚岀殑銆傛秷闄よ繖縐嶉噸澶嶇殑鍏抽敭鏄嬌鍩虹被鎴愪負妯℃澘錛岀敤娑堟伅綾誨瀷浣滀負妯℃澘鍙傛暟鈥斺斿垎媧懼嚱鏁板紩鐢ㄥ埌妯℃澘鐨勫疄鐜板ソ浜庢寚瀹氱被鍨嬶紱璇風湅鍒楄〃5銆?/p>

template < typename聽MessageType >
class 聽MessageHandler:
聽聽聽聽
public virtual 聽MessageHandlerBase
{
聽聽聽聽
virtual void 聽process(MessageType * ) = 0 ;
};
class 聽Message1
{
聽聽聽聽
void 聽dispatch(MessageHandlerBase * 聽handler)
聽聽聽聽{
聽聽聽聽聽聽聽聽dynamic_cast
< MessageHandler < Message1 >&> ( * handler).process( this );
聽聽聽聽}
};
class 聽SpecificMessageHandler:
聽聽聽聽
public 聽MessageHandler < Message1 > ,
聽聽聽聽
public 聽MessageHandler < Message2 >
{
聽聽聽聽
void 聽process(Message1 * );
聽聽聽聽
void 聽process(Message2 * );
};

[鍒楄〃5]
鍑轟簬綆鍖栧師鍥狅紝鍦ㄦ秷鎭被涓殑鍒嗘淳鍑芥暟鍑犱箮鐩稿悓錛屼絾涔熶笉鏄畬鍏ㄧ浉鍚屸斺斿畠浠繀欏繪槑紜殑鎸囧畾灞炰簬瀹冧滑鐨勬寚瀹氭秷鎭被錛屼互渚夸簬杞崲涓洪傚綋鐨勫鐞嗗櫒鍩虹被銆傚儚杞歡涓澶氫簨鎯呬竴鏍鳳紝榪欎釜闂鍙互澧炲姞涓涓澶栫殑灞傛潵瑙e喅鈥斺斿垎媧懼嚱鏁板彲浠ュ鎵樼粰鍗曚釜妯℃澘鍑芥暟錛岃繖涓ā鏉垮嚱鏁頒嬌鐢ㄦā鏉垮弬鏁扮被鍨嬫潵紜畾娑堟伅綾誨瀷鍜屾妸澶勭悊鍣ㄨ漿鎹㈠埌閫傚綋鐨勭被鍨嬩笂銆?鍒楄〃6)

class 聽Message
{
protected :
聽聽聽聽template
< typename聽MessageType >
聽聽聽聽
void 聽dynamicDispatch(MessageHandlerBase * 聽handler,MessageType * 聽self)
聽聽聽聽{
聽聽聽聽聽聽聽聽dynamic_cast
< MessageHandler < MessageType >&> ( * handler).process(self);
聽聽聽聽}
};
class 聽Message1:
聽聽聽聽
public 聽MessageBase
{
聽聽聽聽
void 聽dispatch(MessageHandlerBase * 聽handler)
聽聽聽聽{
聽聽聽聽聽聽聽聽dynamicDispatch(handler,
this );
聽聽聽聽}
};

[鍒楄〃6]

閫氳繃榪涗竴姝ユ娊璞″湪娑堟伅瀵硅薄涓垎媧懼嚱鏁扮殑涓嶅悓涔嬪,鎴戜滑鎶婂伐浣滈泦涓埌涓涓湴鏂光斺旀ā鏉垮嚱鏁扮殑瀹氫箟錛涘畠鎻愪緵浜嗕負淇敼琛屼負鐨勫崟涓鐐廣傚湪娑堟伅綾諱腑鍓╀笅鐨勫垎媧懼嚱鏁伴兘鏄浉鍚岀殑錛岃繖瓚充互鎶婂畠浠畝鍖栧埌闅愯棌緇嗚妭鐨勫畯涓垨鍦ㄦ秷鎭被涔嬮棿涓愬瓧澶嶅埗銆?/p>



鏈鐞嗙殑娑堟伅

榪勪粖涓烘錛屾垜浠睍紺虹殑 dynamicDispach妯℃澘鍑芥暟鐨勪唬鐮佸亣瀹氬鐞嗙殑綾繪槸浠庨傚綋鐨凷pecificMessageHandler鏄淳鐢熺殑錛涘鏄笉鏄繖鏍鳳紝 dynamic_cast灝嗘姏鍑簊td::bad_cast寮傚父銆傛湁鏃惰繖灝辮凍澶熶簡錛屼絾鏄湁鐨勬椂鍊欙紝鏈夋洿閫傚綋鐨勮涓衡斺斾篃璁告洿濂界殑鍋氭硶鏄姏寮冩秷鎭紝榪欎笉鑳借鎺ュ彈娑堟伅鐨勪唬鐞嗗鐞嗘垨璋冪敤catch-all澶勭悊鍣ㄣ備婦渚嬫潵璇達紝dynamicDispatch 鍑芥暟鑳借璋冩暣錛岀敤鍩轟簬鎸囬拡鐨勮漿鎹唬鏇垮熀浜庡紩鐢ㄧ殑杞崲錛屾墍浠ョ粨鏋滃煎彲浠ヤ笌NULL榪涜嫻嬭瘯銆?/p>


緙虹偣(Trade-Off)鍦ㄥ摢閲岋紵
鏈夊姝ゅ鐨勪紭鐐癸紝涓瀹氬瓨鍦ㄥ畠鐨勭己鐐癸紝閭e畠鐨勭己鐐瑰湪鍝噷鍛紵鍦ㄨ繖閲岋紝鏈変袱涓己鐐廣傜涓涓槸錛氶澶栫殑鍔ㄦ佽漿鎹紝涓や釜铏氬嚱鏁拌皟鐢ㄤ細褰卞搷鎬ц兘銆傚鏋滄ц兘涓婃槸涓涓棶棰橈紝榪欏氨鏄竴涓枒闂紝浣嗘槸錛屽湪寰堝鎯呭喌涓嬶紝鑺遍攢鍦ㄨ繖閲岀殑棰濆鐨勬椂闂存槸涓嶅煎緱鍏蟲敞鐨勩傚彲浠ヤ嬌鐢ㄧ浉搴旂殑宸ュ叿鏉ョ瀹氬埌搴曞摢閲屾墠鏄湡姝g殑鎬ц兘鐡墮鎵鍦ㄣ?/p>

絎簩涓己鐐規槸:闇瑕佷負姣忎釜娑堟伅澶勭悊浠庢寚瀹氱殑鍩虹被媧劇敓娑堟伅澶勭悊鍣ㄣ傚洜涓哄鐞嗘柊鐨勬秷鎭被鍨嬮渶瑕佷慨鏀逛袱涓湴鏂光斺旈傚綋鐨勫熀綾誨垪琛ㄥ叆鍙e拰澶勭悊鍑芥暟錛屾墍浠ヨ繖鍙兘鎴愪負閿欒鐨勬潵婧愶紝閬楀け澶勭悊鍑芥暟瀹規槗琚彂鐜幫紝鍥犱負榪欐槸鍏ㄥ眬鐐癸紝浣嗘槸閬楀け鍩虹被鍦ㄤ唬鐮佽繍琛屾椂鍙駭鐢熶笉鏄撴煡瑙夌殑緙洪櫡銆傚洜涓烘病鏈夊鐞嗗嚱鏁扮殑鏃跺欎粎浠呮槸涓嶈皟鐢ㄥ畠銆傝繖浜涢敊璇湪鍗曞厓嫻嬭瘯鐨勬椂鍊欐槸寰堝鏄撹鎶撳嚭鏉ョ殑錛屾墍浠ユ墍瀹炶瘽錛岃繖浜涗笉渚夸箣澶勯兘鎴愪笉浜嗗ぇ闂銆?/p>



]]>
socket緙栫▼錛歋O_REUSEADDR渚嬭В (杞?http://www.shnenglu.com/ace/archive/2006/04/29/6446.htmlStone JiangStone JiangSat, 29 Apr 2006 01:40:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/29/6446.htmlhttp://www.shnenglu.com/ace/comments/6446.htmlhttp://www.shnenglu.com/ace/archive/2006/04/29/6446.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/6446.htmlhttp://www.shnenglu.com/ace/services/trackbacks/6446.html闃呰鍏ㄦ枃

]]>
璋堣皥C++緇ф壙涓殑閲嶈澆錛岃鐩栧拰闅愯棌 (杞?http://www.shnenglu.com/ace/archive/2006/04/25/6243.htmlStone JiangStone JiangTue, 25 Apr 2006 05:29:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/25/6243.htmlhttp://www.shnenglu.com/ace/comments/6243.htmlhttp://www.shnenglu.com/ace/archive/2006/04/25/6243.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/6243.htmlhttp://www.shnenglu.com/ace/services/trackbacks/6243.html
聽璋堣皥C++緇ф壙涓殑閲嶈澆錛岃鐩栧拰闅愯棌

聽聽聽聽聽 鍐欐棰樹箣鍓嶏紝鍏堢粰鍑哄嚑涓叧閿瓧鐨勪腑鑻辨枃瀵圭収錛岄噸杞?overload)錛岃鐩?override),闅愯棌(hide)銆傚湪鏃╂湡鐨凜++涔︾睄涓紝鍙兘緲昏瘧鐨勪漢涓嶇啛鎮変笓涓氱敤璇紙涔熶笉鑳芥粬浠紝浠栦滑涓嶆槸鎼炶綆楁満緙栫▼鐨勶紝浠栦滑鏄嫳璇笓涓氱殑錛夛紝甯稿父鎶婇噸杞?overload)鍜岃鐩?override)鎼為敊錛?/p>

銆銆鎴戜滑鍏堟潵鐪嬩竴浜涗唬鐮佸強鍏剁紪璇戠粨鏋溿?/p>

銆銆瀹炰緥涓錛?br />銆銆
銆銆#include "stdafx.h"
銆銆#include <iostream.h>

銆銆class CB
銆銆{
銆銆public:
聽銆銆銆銆void f(int)
聽銆銆銆銆{
聽銆銆銆銆銆銆聽cout << "CB::f(int)" << endl;
銆銆銆銆聽}

銆銆};


銆銆class CD : public CB
銆銆{
銆銆public:
銆銆銆銆聽void f(int,int)
聽銆銆銆銆{
聽聽銆銆銆銆銆銆cout << "CD::f(int,int)" << endl;
聽銆銆銆銆}

聽銆銆銆銆void test()
聽銆銆銆銆{
聽聽銆銆銆銆銆f(1);
聽銆銆銆銆}
銆銆};

銆int main(int argc, char* argv[])
銆{
銆銆銆聽return 0;
銆}
緙栬瘧浜嗕竴涓?br />error C2660: 'f' : function does not take 1 parameters


緇撹錛氬湪綾籆D榪欎釜鍩熶腑錛屾病鏈塮(int)榪欐牱鐨勫嚱鏁幫紝鍩虹被涓殑void f(int)琚?font color="#ff0000">闅愯棌

銆銆濡傛灉鎶婃淳鐢烠D涓垚鍛樺嚱鏁皏oid f(int,int)鐨勫0鏄庢敼鎴愬拰鍩虹被涓竴鏍鳳紝鍗砯(int)錛屽熀綾諱腑鐨剉oid f(int)榪樻槸涓鏍瘋瑕嗙洊錛屾鏃剁紪璇戜笉浼氬嚭閿欙紝鍦ㄥ嚱鏁頒腑test璋冪敤鐨勬槸CD涓殑f(int)銆

銆銆鎵浠ワ紝鍦?font color="#ff0000">鍩虹被涓?/font>鐨勬煇浜涘嚱鏁幫紝濡傛灉娌℃湁virtral鍏抽敭瀛楋紝鍑芥暟鍚嶆槸f(鍙傛暟鏄粈涔堟垜浠笉綆?錛岄偅涔堝鏋滃湪媧劇敓綾籆D涓?font color="#ff0000">涔熷0鏄庝簡鏌愪釜f鎴愬憳鍑芥暟錛岄偅涔堝湪綾籆D鍩熶腑錛?font color="#ff0000">鍩虹被涓墍鏈夌殑閭d簺f閮借闅愯棌銆?/font>
銆銆濡傛灉浣犳瘮杈冨績鎬ワ紝鎯崇煡閬撲粈涔堟槸闅愯棌錛岀湅鏂囩珷鏈鍚庣殑綆鍗曡鏄庯紝涓嶈繃鎴戝緩璁綘榪樻槸涓姝ヤ竴姝ョ湅涓嬪幓銆?/p>

銆銆鎴戜滑鍒氭墠璇寸殑鏄病鏈塿irtual鐨勬儏鍐碉紝濡傛灉鏈塿irtual鐨勬儏鍐靛憿錛燂紵
銆銆瀹炰緥浜岋細

#include "stdafx.h"
#include <iostream.h>

class CB
{
public:
聽銆銆virtual void f(int)
聽銆銆{
聽聽銆銆銆銆cout << "CB::f(int)" << endl;
聽銆銆}

};


class CD : public CB
{
public:
銆銆聽void f(int)
聽銆銆{
聽聽銆銆銆銆cout << "CD::f(int)" << endl;
銆銆聽}

};

int main(int argc, char* argv[])
{
聽銆return 0;
}

銆銆榪欎箞鍐欏綋鐒舵槸娌¢棶棰樹簡錛屽湪榪欓噷鎴戜笉澶氳垂鍙h垖浜嗭紝榪欐槸寰堢畝鍗曠殑錛屽鎬侊紝铏氬嚱鏁幫紝鐒跺悗浠涔堟寚鍚戝熀綾葷殑鎸囬拡鎸囧悜媧劇敓綾誨璞¢樋錛岄氳繃寮曠敤璋冪敤铏氬嚱鏁伴樋浠涔堢殑錛屽睘鎬у鐨勫緢鍜紝浠涔堬紵錛熶綘涓嶆槑鐧斤紵錛熼殢渚挎壘鏈珻++鐨勪功錛屽浼氳澶氭佸拰铏氬嚱鏁版満鍒剁殑鍝︼紒錛?br />銆銆榪欑鎯呭喌鎴戜滑鍙?font color="#ff0000">瑕嗙洊(override)錛?/font>瑕嗙洊鎸囩殑鏄淳鐢熺被鐨勮櫄鎷熷嚱鏁拌鐩栦簡鍩虹被鐨勫悓鍚嶄笖鍙傛暟鐩稿悓鐨勫嚱鏁幫紒
銆銆鍦ㄨ繖閲岋紝鎴戣寮鴻皟鐨勬槸錛岃繖縐嶈鐩栵紝瑕佹弧瓚充袱涓潯浠?br />銆(a)鏈塿irtual鍏抽敭瀛?/font>錛屽湪鍩虹被涓嚱鏁板0鏄庣殑鏃跺欏姞涓婂氨鍙互浜?br />銆(b)鍩虹被CB涓殑鍑芥暟鍜屾淳鐢熺被CD涓殑鍑芥暟瑕佷竴妯′竴鏍?/font>錛屼粈涔堝彨涓妯′竴鏍鳳紝鍑芥暟鍚嶏紝鍙傛暟錛岃繑鍥炵被鍨嬩笁涓潯浠?/font>銆?br />銆銆鏈変漢鍙兘浼氬(b)涓殑璇存硶璐ㄧ枒錛岃榪斿洖綾誨瀷涔熻涓鏍鳳紵錛?br />銆銆鏄紝瑕嗙洊鐨勮瘽蹇呴』涓鏍鳳紝鎴戣瘯浜嗚瘯錛屽鏋滃湪鍩虹被涓?鎶奻鐨勫0鏄庢敼鎴恦irtual int f(int)錛岀紪璇戝嚭閿欎簡
銆銆error C2555: 'CD::f' : overriding virtual function differs from 'CB::f' only by return type or calling convention
銆銆鎵浠ワ紝瑕嗙洊鐨勮瘽錛屽繀欏昏婊¤凍涓婅堪鐨?a)(b)鏉′歡

銆銆閭d箞濡傛灉鍩虹被CB涓殑鍑芥暟f鏈夊叧閿瓧virtual銆錛屼絾鏄弬鏁板拰媧劇敓綾籆D涓殑鍑芥暟f鍙傛暟涓嶄竴鏍峰憿錛?br />瀹炰緥涓?
聽 #include "stdafx.h"
#include <iostream.h>

class CB
{
銆public:
聽銆銆 virtual聽 void f(int)
銆銆聽{
聽銆銆銆銆聽cout << "CB::f(int)" << endl;
銆銆聽}

}
;


class CD : public CB
{
public:
聽銆銆 void f(int錛宨nt)
聽銆銆{
聽銆銆銆聽cout << "CD::f(int錛宨nt)" << endl;
聽銆銆}

聽銆銆void test()
聽銆銆{
聽銆銆銆銆聽f(1);
聽銆銆}
}
;

int main(int argc, char* argv[])
{
聽return 0;
}

緙栬瘧鍑洪敊浜嗭紝
聽error C2660: 'f' : function does not take 1 parameters
銆銆鍜︼紵錛熷ソ闈㈢啛鐨勯敊錛燂紵瀵癸紝鍜屽疄渚嬩竴涓殑鎯呭喌涓鏍峰摝錛岀粨璁轟篃鏄熀綾諱腑鐨勫嚱鏁拌闅愯棌浜嗐?/p>

銆銆閫氳繃涓婇潰涓変釜渚嬪瓙錛屽緱鍑轟竴涓畝鍗曠殑緇撹
濡傛灉鍩虹被涓殑鍑芥暟鍜屾淳鐢熺被涓殑涓や釜鍚嶅瓧涓鏍風殑鍑芥暟f
婊¤凍涓嬮潰鐨勪袱涓潯浠?br />(a)鍦ㄥ熀綾諱腑鍑芥暟澹版槑鐨勬椂鍊欐湁virtual鍏抽敭瀛?br />(b)鍩虹被CB涓殑鍑芥暟鍜屾淳鐢熺被CD涓殑鍑芥暟涓妯′竴鏍鳳紝鍑芥暟鍚嶏紝鍙傛暟錛岃繑鍥炵被鍨嬮兘涓鏍楓?br />閭d箞榪欏氨鏄彨鍋?font color="#ff0000">瑕嗙洊(override)錛?/font>榪欎篃灝辨槸铏氬嚱鏁幫紝澶氭佺殑鎬ц川

閭d箞鍏朵粬鐨勬儏鍐靛憿錛燂紵鍙鍚嶅瓧涓鏍鳳紝涓嶆弧瓚充笂闈㈣鐩栫殑鏉′歡錛屽氨鏄?font color="#ff0000">闅愯棌浜嗐?/font>

涓嬮潰鎴戣璁叉渶鍏抽敭鐨勫湴鏂逛簡錛屽ソ澶氫漢璁や負錛屽熀綾籆B涓殑f(int)浼氱戶鎵夸笅鏉ュ拰CD涓殑f(int,int)鍦ㄦ淳鐢熺被CD涓瀯鎴愰噸杞斤紝灝卞儚瀹炰緥涓涓兂鍍忕殑閭f牱銆?br />銆銆瀵瑰悧錛熸垜浠厛鐪嬮噸杞界殑瀹氫箟
銆銆閲嶈澆(overload):
銆銆蹇呴』鍦ㄤ竴涓煙涓?鍑芥暟鍚嶇О鐩稿悓浣嗘槸鍑芥暟鍙傛暟涓嶅悓,閲嶈澆鐨勪綔鐢ㄥ氨鏄悓涓涓嚱鏁版湁涓嶅悓鐨勮涓?鍥犳涓嶆槸鍦ㄤ竴涓煙涓殑鍑芥暟鏄棤娉曟瀯鎴愰噸杞界殑,榪欎釜鏄噸杞界殑閲嶈鐗瑰緛
銆銆蹇呴』鍦ㄤ竴涓煙涓?/font>錛岃岀戶鎵挎槑鏄炬槸鍦ㄤ袱涓被涓簡鍝︼紝鎵浠ヤ笂闈㈢殑鎯蟲硶鏄笉鎴愮珛鐨勶紝鎴戜滑嫻嬭瘯鐨勭粨鏋勪篃鏄繖鏍鳳紝媧劇敓綾諱腑鐨刦(int,int)鎶婂熀綾諱腑鐨刦(int)闅愯棌浜?br />銆銆鎵浠ワ紝鐩稿悓鐨勫嚱鏁板悕鐨勫嚱鏁幫紝鍦ㄥ熀綾誨拰媧劇敓綾諱腑鐨勫叧緋誨彧鑳芥槸瑕嗙洊鎴栬呴殣钘忋?/font>

銆銆鍦ㄦ枃绔犱腑錛屾垜鎶婇噸杞藉拰瑕嗙洊鐨勫畾涔夐兘緇欎簡鍑烘潵浜嗭紝浣嗘槸涓鐩存病鏈夌粰闅愯棌鐨勫畾涔夛紝鍦ㄦ渶鍚庯紝鎴戞妸浠栫粰鍑烘潵錛岃繖孌佃瘽鏄綉涓奼oogle鏉ョ殑錛屾瘮杈冮暱錛屼綘鍙互綆鍗曠殑鐞嗚В鎴愶紝鍦ㄦ淳鐢熺被鍩熶腑錛岀湅涓嶅埌鍩虹被涓殑閭d釜鍚屽悕鍑芥暟浜嗭紝鎴栬呰錛屾槸騫舵病鏈夌戶鎵夸笅鏉ョ粰浣犵敤錛屽懙鍛碉紝濡傚疄渚嬩竴銆閭f牱銆?br />銆銆

闅愯棌(hide):
鎸囩殑鏄淳鐢熺被鐨勬垚鍛樺嚱鏁伴殣钘忎簡鍩虹被鍑芥暟鐨勬垚鍛樺嚱鏁?闅愯棌涓璇嶅彲浠ヨ繖涔堢悊瑙?鍦ㄨ皟鐢ㄤ竴涓被鐨勬垚鍛樺嚱鏁扮殑鏃跺?緙栬瘧鍣ㄤ細娌跨潃綾葷殑緇ф壙閾鵑愮駭鐨勫悜涓婃煡鎵懼嚱鏁扮殑瀹氫箟,濡傛灉鎵懼埌浜嗛偅涔堝氨鍋滄鏌ユ壘浜?鎵浠ュ鏋滀竴涓淳鐢熺被鍜屼竴涓熀綾婚兘鏈夊悓涓涓悓鍚?鏆備笖涓嶈鍙傛暟鏄惁鐩稿悓)鐨勫嚱鏁?鑰岀紪璇戝櫒鏈緇堥夋嫨浜嗗湪媧劇敓綾諱腑鐨勫嚱鏁?閭d箞鎴戜滑灝辮榪欎釜媧劇敓綾葷殑鎴愬憳鍑芥暟"闅愯棌"浜嗗熀綾葷殑鎴愬憳鍑芥暟,涔熷氨鏄瀹冮樆姝簡緙栬瘧鍣ㄧ戶緇悜涓婃煡鎵懼嚱鏁扮殑瀹氫箟



]]>STL涓璵ap涓巋ash_map瀹瑰櫒鐨勯夋嫨 (杞?http://www.shnenglu.com/ace/archive/2006/04/25/6223.htmlStone JiangStone JiangTue, 25 Apr 2006 01:25:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/25/6223.htmlhttp://www.shnenglu.com/ace/comments/6223.htmlhttp://www.shnenglu.com/ace/archive/2006/04/25/6223.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/6223.htmlhttp://www.shnenglu.com/ace/services/trackbacks/6223.html STL涓璵ap涓巋ash_map瀹瑰櫒鐨勯夋嫨


]]>
綆鍗曡瑙CE_SOCK Wrapper Class鐨勪嬌鐢?鍘熷垱)http://www.shnenglu.com/ace/archive/2006/04/20/5987.htmlStone JiangStone JiangThu, 20 Apr 2006 15:50:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/20/5987.htmlhttp://www.shnenglu.com/ace/comments/5987.htmlhttp://www.shnenglu.com/ace/archive/2006/04/20/5987.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/5987.htmlhttp://www.shnenglu.com/ace/services/trackbacks/5987.html聽綆鍗曡瑙CE_SOCK Wrapper Class鐨勪嬌鐢?/h1> Stone Jiang
http://www.shnenglu.com/ace


鎴戜滑鍏堟潵鐪嬩竴涓満鏅?
鎮ㄥ幓涓瀹墮棣嗗悆楗?榪欏槨愰浣嶇疆灝卞湪姘存湪娓呭崕琛?3鍙鳳紱鎮ㄥ緱浜嬪厛鐭ラ亾槨愰鐨勪綅緗紝浠庨棬榪涘叆錛屽鏋滀綘鎯崇牬澧欒屽叆閭f槸涓嶅厑鍙殑銆傚綋浣犺繘闂ㄥ悗錛岄棣嗕細鏈変竴浣嶉浣嶅憳鎷涘懠浣狅紝棰嗕綅鍛樹細瀹夋帓涓涓湇鍔″憳涓轟綘鎻愪緵鏈嶅姟鐨勶紝浣犲彲浠ュ悜鏈嶅姟鍛樼偣鑿滐紝鎴栧惉鍙栨湇鍔″憳鐨勬帹鑽愩傜敤槨愬悗浣犵寮槨愰銆?br />
鍒╃敤ACE SOCK緙栫▼錛屼笌涓婇瀛愭瀬鍏剁浉浼箋傛垜浠潵浣滀竴涓姣斻?br /> 槨愰鐨勪綅緗紝鍡紝璁$畻鏈轟笂錛屾垜浠槸IP鍦板潃錛屾按鏈ㄦ竻鍗庢垜浠搴旂殑鏄?smth.org,瀹冪殑闂ㄧ墝鍙峰憿錛屽搴旂殑鏄垜浠殑绔彛鍦板潃錛屽湪ACE涓紝鎴戜滑鐢ˋCE_INET_Addr鏉ヨ〃紺恒?br /> 鍗籌紝
ACE_INET_Addr peer_addr;
peer_addr;.set(23,"smth.org");
鎴戜滑涔熷彲浠ョ洿鎺ラ氳繃瀹冪殑甯﹀弬鏁扮殑鏋勯犲嚱鏁版潵澹版槑鍜屽垵濮嬪寲錛?br /> ACE_INET_Addr peer_addr(23,"smth.org")

槨愰鐨勯浣嶅憳鐩稿綋浜?ACE_SOCK_Acceptor,瀹冭鍔ㄧ殑绔欏湪绔欏彛絳夌潃瀹㈡埛鐨勫埌鏉ワ紝鎮ㄤ綔涓哄鎴鳳紝鏄富鍔ㄧ錛孉CE_SOCK_Connector鍒欐槸鎮ㄥ皢鍦ㄤ唬鐮佷腑鐪嬪埌鐨勩?br />
ACE闈㈠悜榪炴帴鐨勭綉緇滅紪紼嬶紝鏈変笁涓富瑕佺殑瑙掕壊
涓誨姩绔?琚姩绔拰鏁版嵁浜ゆ祦鐨勯氶亾錛屽嵆
ACE_SOCK_Acceptor, ACE_SOCK_Connector鍜孉CE_SOCK_Stream

鎺ユ敹鍜屽彂閫佹暟鎹紝鍒欓氳繃 ACE_SOCK_Stream::recv(...)鍜宻end(...)瀹屾垚錛屾湰渚嬫紨紺轟簡鎺ユ敹鏃剁殑璋冪敤銆?br />
瀹屾垚鏁版嵁浜や簰涔嬪悗錛孉CE_SOCK_Stream::close()瀹屾垚鏂紑榪炴帴鎿嶄綔銆?榪欑浉褰撲簬涔板崟璧頒漢銆?br />
娉細smth.org:23鏄按鏈ㄦ竻鍗嶵elnet鏈嶅姟錛屾偍榪樺彲浠ラ氳繃
telnet smth.org鏉ヨ闂?br />
涓嬮潰鏄畬鏁翠唬鐮佺ず渚?VC 7.1涓嬭皟璇曢氳繃
//@file:聽mybrowser.cpp
//聽聽聽聽聽聽聽Main聽function
//@auth:聽Stone聽Jiang聽<2005119@gmail.com>
//@date:聽2006-4-20

#include聽
"ace/Log_Msg.h"
#include聽
"ace/SOCK_Connector.h"
#include聽
"ace/SOCK_Stream.h"
#include聽
"ace/INET_Addr.h"


int聽ACE_TMAIN(int聽argc,聽ACE_TCHAR*聽argv[])
{
聽聽ACE_DEBUG((LM_DEBUG,
"start聽here\n"));

聽聽
constchar*聽server_hostname聽="smth.org";

聽聽ACE_SOCK_Connector聽connector;
聽聽ACE_SOCK_Stream聽peer;
聽聽ACE_INET_Addr聽peer_addr;
聽聽
char聽buf[64]={0};

聽聽
if(peer_addr.set(23,server_hostname)聽==-1)
聽聽{
聽聽聽聽聽ACE_ERROR_RETURN((LM_DEBUG,
"(%P|%t)聽%p\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
"Set聽server聽host"),-1);

聽聽}
聽聽
elseif(connector.connect(peer,peer_addr)聽==-1)
聽聽{
聽聽聽聽ACE_ERROR_RETURN((LM_DEBUG,
"(%P|%t)聽%p\n",
聽聽聽聽聽聽
"Connection"),-1);

聽聽}
聽聽ACE_DEBUG((LM_DEBUG,
"寤虹珛榪炴帴鎴愬姛聽\n"));
聽聽
constint聽s聽=64*10;
聽聽
int聽m聽=0;
聽聽
for(ssize_t聽n;聽(n聽=聽peer.recv(buf,sizeof聽buf))>0;)
聽聽{
聽聽聽聽
聽聽聽聽ace::write_n(ACE_STDOUT,buf,n);
聽聽聽聽m聽
+=聽n;
聽聽聽聽
if(聽m聽>聽s)
聽聽聽聽{
聽聽聽聽聽聽
break;
聽聽聽聽}
聽聽}
聽聽peer.close();

聽聽
return0;
}






]]>
宸х敤铏氬弸鍏冨嚱鏁?鍘熷垱)http://www.shnenglu.com/ace/archive/2006/04/17/5796.htmlStone JiangStone JiangMon, 17 Apr 2006 14:12:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/17/5796.htmlhttp://www.shnenglu.com/ace/comments/5796.htmlhttp://www.shnenglu.com/ace/archive/2006/04/17/5796.html#Feedback3http://www.shnenglu.com/ace/comments/commentRss/5796.htmlhttp://www.shnenglu.com/ace/services/trackbacks/5796.html鐖剁被鐨勫弸鍏冧笉浼氳嚜鍔ㄦ垚涓哄瓙綾葷殑鍙嬪厓錛涜屼笖鍙嬪厓浼氱牬鍧忓皝瑁咃紱C++鐨勮鏂逛笉鍏佽錛堥潪鎴愬憳錛夊弸鍏冨嚱鏁頒負铏氬嚱鏁般?br />浣嗘槸錛屾煇浜涙椂鍊欙紝蹇呴』閫氳繃鍙嬪厓鎵嶈兘瀹炵幇涓浜涙搷浣滅閲嶈澆錛屽operator<<()錛涘鏋滀負姣忎釜瀛愮被閮藉疄鐜皁perator<<()鍊掓槸涓涓彲琛岀殑鏂規硶錛屼絾鏄樉寰楀緢鍟板棪銆?br />
濡傛灉鑳芥妸鍙嬪厓瀹氫箟涓鴻櫄鍑芥暟錛屽垯瀛愮被鍙互緇ф壙璇ュ弸鍏冪殑鎺ュ彛鑰屾棤闇閲嶅澹版槑鍙嬪ソ閭h澶氬ソ鍟婏紵
鏈枃鍒欓氳繃涓縐嶅彉閫氱殑鏂規硶宸у杈懼埌铏氬嚱鏁扮殑鏁堟灉銆?br />
//鍩虹被 Base.



#pragma聽once
#include聽
< iostream >
using namespace 聽std;
class 聽Base
{
public :
聽聽Base(
void );
聽聽
~ Base( void );
public :
聽聽
virtual void 聽print(ostream & 聽output)聽 = 0 ;
聽聽friend聽ostream
& operator << (ostream & 聽output,Base & 聽obj);
private :
聽聽
char * 聽name_;
聽聽
int 聽age_;
}
;

鍩虹被鐨勫疄鐜?base.cpp
#include聽"StdAfx.h"
#include聽
".\base.h"

Base::Base(
void)
{
聽聽name_聽
="This聽is聽data1";
聽聽age_聽
=18;
}


Base::
~Base(void)
{
}


void聽Base::print(ostream&聽output)
{
聽聽output
<<"name聽=聽"<<name_<<endl;
聽聽output
<<"age聽=聽"<<age_<<endl;
}


ostream
&operator<<(ostream&聽output,Base&聽obj)
{
聽聽obj.print(output);
聽聽
return聽output;
}


媧劇敓綾葷殑 Derived.h

#pragma聽once
#include聽
"Base.h"
class聽Derived聽:public聽Base
{
public:
聽聽Derived(
int聽score聽=80);
聽聽
~Derived(void);
聽聽
virtualvoid聽print(ostream&聽output);
private:
聽聽
int聽score_;
}
;

媧劇敓綾葷殑瀹炵幇 Derived.cpp
#include聽"StdAfx.h"
#include聽
".\derived.h"

Derived::Derived(
int聽score):score_(score)
{
聽聽
}


Derived::
~Derived(void)
{
}


void聽Derived::print(ostream&聽output)
{
聽聽Base::print(output);
聽聽output
<<"score聽=聽"<<score_<<endl;
}


涓葷▼搴弇ain.cpp
//聽Test_VirtualFirendFunction.cpp聽:聽Defines聽the聽entry聽point聽for聽the聽console聽application.
//

#include聽
"stdafx.h"
#include聽
<iostream>
#include聽
"Derived.h"
usingnamespace聽std;
int聽_tmain(int聽argc,聽_TCHAR*聽argv[])
{
聽聽Derived聽聽d;

聽聽Derived聽聽d2(
90);
聽聽cout
<<d<<endl<<d2<<endl;
聽聽聽聽
return0;
}



灞忓箷杈撳叆緇撴灉
name聽=聽This聽is聽data1
age聽=聽18
score聽=聽80

name聽=聽This聽is聽data1
age聽=聽18
score聽=聽90

緇撴灉錛?br />浠諱綍浠嶣ase媧劇敓綾葷殑錛岄兘鍙互鍒╃敤cout<<obj鐨勬満鍒墮氳繃嫻佽繘琛岃緭鍑恒?br />
鍚屾牱閬撶悊錛屼篃鍙互鍒╃敤姝ゆ柟娉曞疄鐜癆CE_InputCDR聽聽/ ACE_OutputCDR瀵圭綉緇滄搷浣滃簭鍒楀寲鎿嶄綔銆?br />(鏈枃涔熸槸鍥炵瓟鏌愮綉鍙嬪叧浜庢淳鐢熺被涓嶈兘閲嶈澆鐨勯棶棰樼殑鍥炲)



]]>
C++椋庢牸鐨勭被鍨嬭漿鎹㈢殑鐢ㄦ硶 (杞?http://www.shnenglu.com/ace/archive/2006/04/16/5641.htmlStone JiangStone JiangSun, 16 Apr 2006 06:21:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/16/5641.htmlhttp://www.shnenglu.com/ace/comments/5641.htmlhttp://www.shnenglu.com/ace/archive/2006/04/16/5641.html#Feedback1http://www.shnenglu.com/ace/comments/commentRss/5641.htmlhttp://www.shnenglu.com/ace/services/trackbacks/5641.html C++椋庢牸鐨勭被鍨嬭漿鎹㈢殑鐢ㄦ硶
榪欐槸More聽Effecitve聽C++閲岀殑絎簩鏉″綾誨瀷杞崲璁茬殑寰堝ソ錛屼篃寰堝熀紜濂芥噦銆?br />Item聽M2錛氬敖閲忎嬌鐢–++椋庢牸鐨勭被鍨嬭漿鎹?br />浠旂粏鎯蟲兂鍦頒綅鍗戣幢鐨勭被鍨嬭漿鎹㈠姛鑳斤紙cast錛夛紝鍏跺湪紼嬪簭璁捐涓殑鍦頒綅灝辮薄goto璇彞涓鏍蜂護浜洪剻瑙嗐備絾鏄畠榪樹笉鏄棤娉曚護浜哄繊鍙楋紝鍥犱負褰撳湪鏌愪簺绱ц鐨勫叧澶達紝綾誨瀷杞崲榪樻槸蹇呴渶鐨勶紝榪欐椂瀹冩槸涓涓繀闇鍝併?br />涓嶈繃C椋庢牸鐨勭被鍨嬭漿鎹㈠茍涓嶄唬琛ㄦ墍鏈夌殑綾誨瀷杞崲鍔熻兘銆?br />涓 鏉ュ畠浠繃浜庣矖椴侊紝鑳藉厑璁鎬綘鍦ㄤ換浣曠被鍨嬩箣闂磋繘琛岃漿鎹€備笉榪囧鏋滆榪涜鏇寸簿紜殑綾誨瀷杞崲錛岃繖浼氭槸涓涓紭鐐廣傚湪榪欎簺綾誨瀷杞崲涓瓨鍦ㄧ潃宸ㄥぇ鐨勪笉鍚岋紝渚嬪鎶婁竴涓寚鍚? 聽const瀵硅薄鐨勬寚閽堬紙pointer-to-const-object錛夎漿鎹㈡垚鎸囧悜闈瀋onst瀵硅薄鐨勬寚閽堬紙pointer-to-non -const聽-object錛?鍗充竴涓粎浠呭幓闄onst鐨勭被鍨嬭漿鎹?錛屾妸涓涓寚鍚戝熀綾葷殑鎸囬拡杞崲鎴愭寚鍚戝瓙綾葷殑鎸囬拡錛堝嵆瀹屽叏鏀瑰彉瀵硅薄綾誨瀷錛夈? 浼犵粺鐨凜椋庢牸鐨勭被鍨嬭漿鎹笉瀵逛笂榪頒袱縐嶈漿鎹㈣繘琛屽尯鍒嗐傦紙榪欎竴鐐逛篃涓嶄護浜烘儕璁訛紝鍥犱負C椋庢牸鐨勭被鍨嬭漿鎹㈡槸涓篊璇█璁捐鐨勶紝鑰屼笉鏄負C++璇█璁捐鐨勶級銆?br />浜? 鏉椋庢牸鐨勭被鍨嬭漿鎹㈠湪紼嬪簭璇彞涓毦浠ヨ瘑鍒傚湪璇硶涓婏紝綾誨瀷杞崲鐢卞渾鎷彿鍜屾爣璇嗙緇勬垚錛岃岃繖浜涘彲浠ョ敤鍦–錛嬶紜涓殑浠諱綍鍦版柟銆傝繖浣垮緱鍥炵瓟璞¤繖鏍蜂竴涓渶鍩烘湰鐨勬湁 鍏崇被鍨嬭漿鎹㈢殑闂鍙樺緱寰堝洶闅撅細鈥滃湪榪欎釜紼嬪簭涓槸鍚︿嬌鐢ㄤ簡綾誨瀷杞崲錛熲濄傝繖鏄洜涓轟漢宸ラ槄璇誨緢鍙兘蹇界暐浜嗙被鍨嬭漿鎹㈢殑璇彞錛岃屽埄鐢ㄨ薄grep鐨勫伐鍏風▼搴忎篃涓嶈兘浠? 璇彞鏋勬垚涓婂尯鍒嗗嚭瀹冧滑鏉ャ?br />C++閫氳繃寮曡繘鍥涗釜鏂扮殑綾誨瀷杞崲鎿嶄綔絎﹀厠鏈嶄簡C椋庢牸綾誨瀷杞崲鐨勭己鐐癸紝榪欏洓涓搷浣滅鏄?聽 static_cast,聽const_cast,聽dynamic_cast,聽鍜宺einterpret_cast銆? 鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝瀵逛簬榪欎簺鎿嶄綔絎︿綘鍙渶瑕佺煡閬撳師鏉ヤ綘涔犳儻浜庤繖鏍峰啓錛?br />(type)聽expression
鑰岀幇鍦ㄤ綘鎬誨簲璇ヨ繖鏍峰啓錛?br />static_cast
< type > (expression)
渚嬪錛屽亣璁句綘鎯蟲妸涓涓猧nt杞崲鎴恉ouble錛屼互渚胯鍖呭惈int綾誨瀷鍙橀噺鐨勮〃杈懼紡浜х敓鍑烘誕鐐規暟鍊肩殑緇撴灉銆傚鏋滅敤C椋庢牸鐨勭被鍨嬭漿鎹紝浣犺兘榪欐牱鍐欙細
int聽firstNumber,聽secondNumber;

double聽result聽=聽((double)firstNumber)/secondNumber錛?br />濡傛灉鐢ㄤ笂榪版柊鐨勭被鍨嬭漿鎹㈡柟娉曪紝浣犲簲璇ヨ繖鏍峰啓錛?br />double聽result聽=聽static_cast
< double > (firstNumber)/secondNumber;
榪欐牱鐨勭被鍨嬭漿鎹笉璁烘槸瀵逛漢宸ヨ繕鏄紼嬪簭閮藉緢瀹規槗璇嗗埆銆?br />static_cast聽 鍦ㄥ姛鑳戒笂鍩烘湰涓婁笌C椋庢牸鐨勭被鍨嬭漿鎹竴鏍峰己澶э紝鍚箟涔熶竴鏍楓傚畠涔熸湁鍔熻兘涓婇檺鍒躲備緥濡傦紝浣犱笉鑳界敤static_cast璞$敤C椋庢牸鐨勭被鍨嬭漿鎹竴鏍鋒妸 聽struct杞崲鎴恑nt綾誨瀷鎴栬呮妸double綾誨瀷杞崲鎴愭寚閽堢被鍨嬶紝鍙﹀錛宻tatic_cast涓嶈兘浠庤〃杈懼紡涓幓闄onst灞炴э紝鍥犱負 鍙︿竴涓柊鐨勭被鍨嬭漿鎹㈡搷浣滅const_cast鏈夎繖鏍風殑鍔熻兘銆?br />鍏跺畠鏂扮殑C++綾誨瀷杞崲鎿嶄綔絎﹁鐢ㄥ湪闇瑕佹洿澶氶檺鍒剁殑鍦版柟銆俢onst_cast鐢ㄤ簬 綾誨瀷杞崲鎺夎〃杈懼紡鐨刢onst鎴杤olatileness灞炴с傞氳繃浣跨敤const_cast錛屼綘鍚戜漢浠拰緙栬瘧鍣ㄥ己璋冧綘閫氳繃綾誨瀷杞崲鎯沖仛鐨勫彧鏄敼鍙樹竴浜涗笢 瑗跨殑聽constness鎴栬卾olatileness灞炴с傝繖涓惈涔夎緙栬瘧鍣ㄦ墍綰︽潫銆傚鏋滀綘璇曞浘浣跨敤const_cast鏉ュ畬鎴愪慨鏀? constness聽鎴栬卾olatileness灞炴т箣澶栫殑浜嬫儏錛屼綘鐨勭被鍨嬭漿鎹㈠皢琚嫆緇濄備笅闈㈡槸涓浜涗緥瀛愶細
class聽Widget聽{聽聽};
class聽SpecialWidget:聽public聽Widget聽{聽聽};
void聽update(SpecialWidget聽*psw);
SpecialWidget聽sw;聽//聽sw聽鏄竴涓潪const聽瀵硅薄銆?br />const聽SpecialWidget&聽csw聽=聽sw;聽//聽csw聽鏄痵w鐨勪竴涓紩鐢?br />//聽瀹冩槸涓涓猚onst聽瀵硅薄
update(
&csw );聽//聽閿欒!涓嶈兘浼犻掍竴涓猚onst聽SpecialWidget*聽鍙橀噺
//聽緇欎竴涓鐞哠pecialWidget*綾誨瀷鍙橀噺鐨勫嚱鏁?br />update(const_cast
< SpecialWidget * > ( &csw ));
//聽姝g‘錛宑sw鐨刢onst琚樉紺哄湴杞崲鎺夛紙
//聽csw鍜宻w涓や釜鍙橀噺鍊煎湪update
//鍑芥暟涓兘琚洿鏂幫級
update((SpecialWidget*)
&csw );
//聽鍚屼笂錛屼絾鐢ㄤ簡涓涓洿闅捐瘑鍒?br />//鐨凜椋庢牸鐨勭被鍨嬭漿鎹?br />Widget聽*pw聽=聽new聽SpecialWidget;
update(pw);聽//聽閿欒錛乸w鐨勭被鍨嬫槸Widget*錛屼絾鏄?br />//聽update鍑芥暟澶勭悊鐨勬槸SpecialWidget*綾誨瀷
update(const_cast
< SpecialWidget * > (pw));
//聽閿欒錛乧onst_cast浠呰兘琚敤鍦ㄥ獎鍝?br />//聽constness聽or聽volatileness鐨勫湴鏂逛笂銆?
//聽涓嶈兘鐢ㄥ湪鍚戠戶鎵垮瓙綾昏繘琛岀被鍨嬭漿鎹€?br />鍒扮洰鍓嶄負姝紝const_cast鏈鏅氱殑鐢ㄩ斿氨鏄漿鎹㈡帀瀵硅薄鐨刢onst灞炴с?br />絎? 浜岀鐗規畩鐨勭被鍨嬭漿鎹㈢鏄痙ynamic_cast錛屽畠琚敤浜庡畨鍏ㄥ湴娌跨潃綾葷殑緇ф壙鍏崇郴鍚戜笅榪涜綾誨瀷杞崲銆傝繖灝辨槸璇達紝浣犺兘鐢╠ynamic_cast鎶婃寚鍚戝熀 綾葷殑鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚鎸囧悜鍏舵淳鐢熺被鎴栧叾鍏勫紵綾葷殑鎸囬拡鎴栧紩鐢紝鑰屼笖浣犺兘鐭ラ亾杞崲鏄惁鎴愬姛銆傚け璐ョ殑杞崲灝嗚繑鍥炵┖鎸囬拡錛堝綋瀵規寚閽堣繘琛岀被鍨嬭漿鎹㈡椂錛夋垨鑰呮姏鍑哄紓甯? 錛堝綋瀵瑰紩鐢ㄨ繘琛岀被鍨嬭漿鎹㈡椂錛夛細
Widget聽*pw;

update(dynamic_cast
< SpecialWidget * > (pw));
//聽姝g‘錛屼紶閫掔粰update鍑芥暟涓涓寚閽?br />//聽鏄寚鍚戝彉閲忕被鍨嬩負SpecialWidget鐨刾w鐨勬寚閽?br />//聽濡傛灉pw紜疄鎸囧悜涓涓璞?
//聽鍚﹀垯浼犻掕繃鍘葷殑灝嗕嬌絀烘寚閽堛?br />void聽updateViaRef(SpecialWidget&聽rsw);
updateViaRef(dynamic_cast
< SpecialWidget & > (*pw));
//姝g‘銆備紶閫掔粰updateViaRef鍑芥暟
//聽SpecialWidget聽pw聽鎸囬拡錛屽鏋減w
//聽紜疄鎸囧悜浜嗘煇涓璞?br />//聽鍚﹀垯灝嗘姏鍑哄紓甯?br />dynamic_casts鍦ㄥ府鍔╀綘嫻忚緇ф壙灞傛涓婃槸鏈夐檺鍒剁殑銆傚畠涓嶈兘琚敤浜庣己涔忚櫄鍑芥暟鐨勭被鍨嬩笂錛堝弬瑙佹潯嬈綧24錛夛紝涔熶笉鑳界敤瀹冩潵杞崲鎺塩onstness錛?br />int聽firstNumber,聽secondNumber;

double聽result聽=聽dynamic_cast
< double > (firstNumber)/secondNumber;
//聽閿欒錛佹病鏈夌戶鎵垮叧緋?br />const聽SpecialWidget聽sw;

update(dynamic_cast
< SpecialWidget * > ( &sw ));
//聽閿欒!聽dynamic_cast涓嶈兘杞崲
//聽鎺塩onst銆?br />濡備綘鎯沖湪娌℃湁緇ф壙鍏崇郴鐨勭被鍨嬩腑榪涜杞崲錛屼綘鍙兘鎯沖埌static_cast銆傚鏋滄槸涓轟簡鍘婚櫎const錛屼綘鎬誨緱鐢╟onst_cast銆?br />榪欏洓涓被鍨嬭漿鎹㈢涓殑鏈鍚庝竴涓槸reinterpret_cast銆備嬌鐢ㄨ繖涓搷浣滅鐨勭被鍨嬭漿鎹紝鍏剁殑杞崲緇撴灉鍑犱箮閮芥槸鎵ц鏈熷畾涔夛紙implementation-defined錛夈傚洜姝わ紝浣跨敤reinterpret_casts鐨勪唬鐮佸緢闅劇Щ妞嶃?br />reinterpret_casts鐨勬渶鏅氱殑鐢ㄩ斿氨鏄湪鍑芥暟鎸囬拡綾誨瀷涔嬮棿榪涜杞崲銆備緥濡傦紝鍋囪浣犳湁涓涓嚱鏁版寚閽堟暟緇勶細
typedef聽void聽(*FuncPtr)();聽//聽FuncPtr聽is聽涓涓寚鍚戝嚱鏁?br />//聽鐨勬寚閽堬紝璇ュ嚱鏁版病鏈夊弬鏁?br />//聽榪斿洖鍊肩被鍨嬩負void
FuncPtr聽funcPtrArray[10];聽//聽funcPtrArray聽鏄竴涓兘瀹圭撼
//聽10涓狥uncPtrs鎸囬拡鐨勬暟緇?br />璁╂垜浠亣璁句綘甯屾湜錛堝洜涓烘煇浜涜帿鍚嶅叾濡欑殑鍘熷洜錛夋妸涓涓寚鍚戜笅闈㈠嚱鏁扮殑鎸囬拡瀛樺叆funcPtrArray鏁扮粍錛?br />int聽doSomething();
浣犱笉鑳戒笉緇忚繃綾誨瀷杞崲鑰岀洿鎺ュ幓鍋氾紝鍥犱負doSomething鍑芥暟瀵逛簬funcPtrArray鏁扮粍鏉ヨ鏈変竴涓敊璇殑綾誨瀷銆傚湪FuncPtrArray鏁扮粍閲岀殑鍑芥暟榪斿洖鍊兼槸void綾誨瀷錛岃宒oSomething鍑芥暟榪斿洖鍊兼槸int綾誨瀷銆?br />funcPtrArray[0]聽=聽
&doSomething; 聽//聽閿欒錛佺被鍨嬩笉鍖歸厤
reinterpret_cast鍙互璁╀綘榪嬌緙栬瘧錕鉸?/span>


]]>
浠婂ぉ鍠滃緱涓ゆ湰涔?闇瑕佺殑璇風暀璦http://www.shnenglu.com/ace/archive/2006/04/14/5514.htmlStone JiangStone JiangFri, 14 Apr 2006 02:14:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/14/5514.htmlhttp://www.shnenglu.com/ace/comments/5514.htmlhttp://www.shnenglu.com/ace/archive/2006/04/14/5514.html#Feedback5http://www.shnenglu.com/ace/comments/commentRss/5514.htmlhttp://www.shnenglu.com/ace/services/trackbacks/5514.htmlC++ Coding Standards: 101 Rules, Guidelines, and Best PracticesBy Herb聽Sutter, Andrei聽Alexandrescu
榪欐湰涔﹀緱鍒?005 Jolt澶у

2. The Art or Unix Programming
榪欐槸緇xx鍜寉yyy浠ユ潵鐨勬渶浼樼鐨刄nix璇葷墿.



]]>
閫氳繃妯℃澘瀹炵幇"澶氭佹?,閬垮紑緇ф壙甯︽潵鐨勬ц兘寮閿涔嬭璁?http://www.shnenglu.com/ace/archive/2006/04/14/5506.htmlStone JiangStone JiangFri, 14 Apr 2006 01:29:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/14/5506.htmlhttp://www.shnenglu.com/ace/comments/5506.htmlhttp://www.shnenglu.com/ace/archive/2006/04/14/5506.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/5506.htmlhttp://www.shnenglu.com/ace/services/trackbacks/5506.html澶氭佺敓鍏跺疄榪樺彲浠ラ氳繃綾葷殑鑱氬悎鎴栫粍鍚堢殑鏂瑰紡鏉ヨ揪鍒?wbr>,浠庤岃繕鍙互閬垮厤緇ф壙鎴栧緇ф壙,
浠g爜濡備笅 (鏈湪寮鍙戠幆澧冧腑璋冭瘯)
#include聽<stdio.h>

template聽
<class聽T>
class聽A聽聽
{聽
public:聽
聽聽
void聽print()聽
聽聽{聽
聽聽聽聽base_.b();聽
聽聽}聽聽聽
聽聽typename聽T聽base_;
};聽


class聽B聽
{聽
public:聽
聽聽
void聽b()聽
聽聽{聽
聽聽聽聽printf(
"聽Class聽B---------------------\n");聽
聽聽}聽聽聽
};聽

class聽C聽
{聽
public:聽
聽聽
void聽b()聽
聽聽{聽
聽聽聽聽printf(
"聽Class聽C---------------------\n");聽
聽聽}聽聽聽
};聽

int聽main(int,聽char*聽[])聽
{聽
聽聽A
<B>聽c;聽
聽聽c.print();聽
聽聽A
<C>聽c2;
聽聽c2.print();
聽聽
return0;聽聽聽
}聽



]]>
閫氳繃妯℃澘瀹炵幇"澶氭佹?,閬垮紑緇ф壙甯︽潵鐨勬ц兘寮閿涔嬭璁?/title><link>http://www.shnenglu.com/ace/archive/2006/04/13/5478.html</link><dc:creator>Stone Jiang</dc:creator><author>Stone Jiang</author><pubDate>Thu, 13 Apr 2006 10:21:00 GMT</pubDate><guid>http://www.shnenglu.com/ace/archive/2006/04/13/5478.html</guid><wfw:comment>http://www.shnenglu.com/ace/comments/5478.html</wfw:comment><comments>http://www.shnenglu.com/ace/archive/2006/04/13/5478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ace/comments/commentRss/5478.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ace/services/trackbacks/5478.html</trackback:ping><description><![CDATA[浠婂ぉ鍦ㄧ湅鍒頒竴浣嵚犵綉鍙嬪叧浜庢硾鍨嬬紪紼嬬殑涓涓棶棰?婧愪唬鐮佹垜紼嶆暣鐞嗗彉鎴愯繖涓牱瀛? <div>榪欓噷鏄紓澶氭佹э紓鐨勪竴縐嶅疄鐜版柟寮?/div><div>聽</div><div><table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tbody><tr><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent" valign="top" width="568"><p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"><font face="Times New Roman"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue"></span></font><script><!-- D(["mb","class\n</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"> </span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:blue\">A</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\">\n : </span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:blue\">public</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"> </span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:blue\">\nBASE</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"> </span></font></p>\n<p style\u003d\"margin:0cm 0cm 0pt;text-align:left\" align\u003d\"left\"><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"><font face\u003d\"Times New Roman\">{ \n</font></span></p>\n<p style\u003d\"margin:0cm 0cm 0pt;text-align:left\" align\u003d\"left\"><font face\u003d\"Times New Roman\"><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:blue\">public\n</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\">: </span></font></p>\n<p style\u003d\"margin:0cm 0cm 0pt;text-align:left\" align\u003d\"left\"><font face\u003d\"Times New Roman\"><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"><span>\n聽 </span></span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:blue\">void</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"> </span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:#880000\">\nprint</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\">() </span></font></p>\n<p style\u003d\"margin:0cm 0cm 0pt;text-align:left\" align\u003d\"left\"><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"><font face\u003d\"Times New Roman\"><span>\n聽 </span>{ </font></span></p>\n<p style\u003d\"margin:0cm 0cm 0pt;text-align:left\" align\u003d\"left\"><font face\u003d\"Times New Roman\"><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"><span>\n聽聽聽 </span></span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:blue\">BASE</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\">::</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:#880000\">\nb</span><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\">(); </span></font></p>\n<p style\u003d\"margin:0cm 0cm 0pt;text-align:left\" align\u003d\"left\"><span lang\u003d\"EN-US\" style\u003d\"font-size:12pt;color:black\"><font face\u003d\"Times New Roman\">",1] ); //--></script></p></td></tr></tbody></table><br /></div><div><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include聽</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">聽<br /><br />template聽</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">聽BASE</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">聽<br /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">聽A聽:聽</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">聽BASE聽<br />{聽<br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:聽<br />聽聽</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">聽print()聽<br />聽聽{聽<br />聽聽聽聽BASE::b();聽<br />聽聽}聽聽聽<br />};聽<br /><br /><br /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">聽B聽<br />{聽<br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:聽<br />聽聽</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">聽b()聽<br />聽聽{聽<br />聽聽聽聽printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">聽Class聽B---------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br />聽聽}聽聽聽<br />};聽<br /><br /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">聽C聽<br />{聽<br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:聽<br />聽聽</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">聽b()聽<br />聽聽{聽<br />聽聽聽聽printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">聽Class聽C---------------------\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);聽<br />聽聽}聽聽聽<br />};聽<br /><br /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">聽main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,聽</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">聽[])聽<br />{聽<br />聽聽A</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">B</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">聽c;聽<br />聽聽c.print();聽<br />聽聽A</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">聽c2;<br />聽聽c2.print();<br />聽聽</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">聽</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;聽聽聽<br />}聽<br /><br /></span></div></div><div>灝界General Programming 涓嶰bject-Oriend Programming娌℃湁浠涔堜紭鍔d箣鍒?濡傚仛涔樻硶鍜屽仛鍔犳硶娌℃湁濂?wbr>鍧忎箣鍒嗕竴鏍鳳紟</wbr></div><div>浣嗚繖閲岋紝鎴戣繕鏄兂闂竴涓嬶紝榪欓噷鏈夋ā鏉挎湁浠涔堝叿浣撶殑濂藉錛?/div><div>聽</div><div>涓庝箣絳夋晥鐨勬垜鍙互閫氳繃浠庡熀綾繪淳鐢熺殑鏂瑰紡錛屽疄鐜板悓鏍風殑鏁堟灉<wbr>錛屼絾浼楁墍鍛ㄧ煡錛岀戶鎵夸即闅忕潃鏄痸irtual table鍜屾ц兘涓嬮檷錛庤繖閲岋紝鐢ㄨ繖縐嶆柟娉曟樉鐒跺彲浠ラ伩寮涓婅堪闂錛?/wbr></div><div>聽</div><div>榪欏彧鏄垜鐨勮鐭ヨ兘鍔涳紝鍑轟簬鎶涚爾寮曠帀鐨勭洰鐨勶紝甯屾湜澶у鑳藉鍙戣〃鐐規剰瑙?wbr>錛庤繖榪樻湁浠涔堢泭澶勫憿錛?/wbr></div><img src ="http://www.shnenglu.com/ace/aggbug/5478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ace/" target="_blank">Stone Jiang</a> 2006-04-13 18:21 <a href="http://www.shnenglu.com/ace/archive/2006/04/13/5478.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C++緙栫爜涓嶈鑼冨嚭鐜扮殑閿欒涓渚嬬殑瑙f瀽http://www.shnenglu.com/ace/archive/2006/04/11/5292.htmlStone JiangStone JiangTue, 11 Apr 2006 07:29:00 GMThttp://www.shnenglu.com/ace/archive/2006/04/11/5292.htmlhttp://www.shnenglu.com/ace/comments/5292.htmlhttp://www.shnenglu.com/ace/archive/2006/04/11/5292.html#Feedback0http://www.shnenglu.com/ace/comments/commentRss/5292.htmlhttp://www.shnenglu.com/ace/services/trackbacks/5292.html
鍦℉uihoo鐨凙CE璁哄潧涓紝鏈変竴緗戝弸闂埌涓轟粈涔圓CE_Time_Value鐨勭鏁板湪Debug鐗堟湰灝戜竴縐掞紝鑰?br />鍦≧elease鐗堟湰涓娾滄甯糕濄傜粡榪囧鍏朵唬鐮佺殑澶嶈浠ュ強瀵笰CE鐨勮窡韙紝鍙戠幇鍘熸潵鏄紪鐮佷笉瑙勮寖鐘?br />涓嬬殑涓涓緢涓ラ噸鐨勯敊璇犳垚鐨勩傛湰鏂囧氨璁ㄨ榪欎竴渚嬪瓙銆?br />
浠ヤ笅寮曠敤

聽1/*
聽2鎴戝啓浜嗕釜浠庡勾鏈堟棩鏃跺垎縐掓暟鍊煎緱鍒癆CE_Time_Value緇撴灉鐨勫嚱鏁?
聽3*/
聽4long聽s_get_ace_datetime(ACE_Time_Value聽&聽ace_datetime,
聽5聽聽聽聽聽聽int聽year,
聽6聽聽聽聽聽聽int聽month,
聽7聽聽聽聽聽聽int聽day,
聽8聽聽聽聽聽聽int聽hour,
聽9聽聽聽聽聽聽int聽min,
10聽聽聽聽聽聽int聽sec)
11{
12聽聽聽聽if(year<1970||聽year>2038||聽month<1||聽month>12||聽day<1||聽day>31||
13聽聽聽聽聽聽聽聽hour<0||聽hour>23||聽min<0||聽min>59||聽sec<0||聽sec>59)
14聽聽聽聽聽聽聽聽聽聽ACE_ERROR_RETURN((LM_ERROR,
15聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽ACE_TEXT("%I(鏃ユ湡鏃墮棿鍙傛暟婧㈠嚭鍚堢悊鐨勪範鎯棩鏈熸椂闂磋寖鍥?970.1.2-2038.1.18)n")),-1);
16聽聽聽聽timespec_t聽spec_t;
17聽聽聽聽tm聽time_tm;聽
18聽聽time_tm.tm_year=year-1900;
19聽聽time_tm.tm_mon=month-1;
20聽聽time_tm.tm_mday=day;
21聽聽time_tm.tm_hour=hour;
22聽聽time_tm.tm_min=min;
23聽聽#if聽defined聽(ACE_NDEBUG)
24聽聽聽聽time_tm.tm_sec=sec;
25聽聽#else
26聽聽聽聽time_tm.tm_sec=sec+1;聽//濂囨?褰撶敱鍚勯儴鍒嗘暟閲忔瀯閫燗CE_Time_Value鏃?debug緙栬瘧鏃?縐掔殑鏁伴噺鎬繪槸鑷姩鍑?,鍦ㄦ瑕佽ˉ涓?
27聽聽#endif
28聽聽聽spec_t.tv_sec=mktime(&time_tm);聽
29聽聽聽if(spec_t.tv_sec<0)
30聽聽聽ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT("%I(鏃ユ湡鏃墮棿杞寲閿欒,寰楀埌<0鐨則ime_t,鏃ユ湡鑼冨洿鏄?970.1.2-2038.1.18)n")),-1);
31聽聽聽ace_datetime.set(spec_t);
32聽聽聽return0;
33}
34/*
35鎴戝湪VC++7.1涓婂垎鍒紪璇戜簡Debug鐗堟湰鍜孯elease鐗堟湰,time_tm.tm_sec绔熺劧浼氭湁涓縐掔殑宸埆,鑾悕鍏跺鍦板獎鍝嶄簡鎴戠殑欏圭洰.
36鍝綅楂樻墜鐭ラ亾涓轟粈涔?
37鍙﹀ACE_Time_Value鐨勮寖鍥村お灝?ACE涓槸鍚︽湁澶ф棩鏈熸椂闂磋寖鍥寸殑鍏跺畠綾誨皝瑁?
38*/

浠ヤ笅鏄垜鐨勫洖璐?

浣犺繖涓棶棰樿繕鐪熸湁瓚?鎴戣窡韙簡ACE鐩稿叧浠g爜鍚庢墠鍙戠幇,闂鍘熸潵鍑哄湪浣犲啓鐨勫嚱鏁頒腑,鐥呭洜鏄?浣跨敤鏈畬鍏ㄥ垵濮嬪寲鐨勭粨鏋勪綋鍙橀噺

timespec_t聽spec_t;
鍚庨潰鍔犱笂璇彞
memset(
&spec_t ,0,sizeof(timespec_t));
鍗沖彲

灞閮ㄥ彉閲徛爏pec_t聽鍦╠ebug鏃?鍚勫瓧孌靛潎琚垵濮嬪寲涓?xCCCCCCCC,瀹冩槸涓涓礋鏁?br />鍦ㄤ笅闈㈢殑鎿嶄綔涓?鍙慨鏀逛簡tv_sec,鑰宼v_nsec聽浠嶄負涓涓礋鏁?br />spec_t.tv_sec=mktime(
&time_tm );聽


ACE_Time_Value::normalize()榛橀粯鍦頒負浣犱綔浜嗚鏍煎寲澶勭悊錛屽氨鏇夸綘鍑忓幓浜嗕竴縐掗挓銆?br />





鍘熶唬鐮佹洿涓ラ噸鐨勯敊璇湪浜庯細
鍘熶互涓?Release鐗堟湰鏄滄甯糕濈殑錛屽叾瀹炰笉鐒訛紝鑰屾槸Release闅愯棌浜嗘洿涓ラ噸鐨勯敊璇?br />涓ラ噸鏄洜涓哄畠琛ㄧ幇鍑洪敊璇殑鏃跺欏緢闅忔満錛屼竴鏃︿駭鍝佸彂甯冿紝寰堥毦鍙戠幇銆?br />

// 瀵硅薄(緇撴瀯浣?timespec鏈変袱涓叕鏈夊睘鎬?/span>
聽typedef聽 struct 聽timespec
聽聽聽聽聽
{
聽聽聽聽聽聽聽time_t聽tv_sec;聽
// 聽Seconds
聽聽聽聽聽聽聽 long 聽tv_nsec;聽 // 聽Nanoseconds,聽鍗佷嚎鍒嗕箣涓縐?/span>
聽聽聽聽聽}
聽timespec_t;
聽聽聽聽聽

鍦ㄥ師浠g爜16琛?br />timespec_t spec_t;
鏋勯犱簡涓涓?timespec_t聽 涓存椂瀵硅薄spec_t鍚?debug鐗堟妸瀹冨悇瀛楁鍒濆鍖栦負 0xcccccccc,榪欎嬌寰楅棶棰樹竴涓嬪瓙寰椾簬鏇濆厜.鑰孯elease鐗堟湰, spec_t 涓轟竴涓殢鏈哄? 鏈緥紼嬩腑,涓嶅厑璁?spec_t鐨則v_nsec涓洪潪0鐨勪換浣曟暟,涓烘甯稿敖綆$湅涓婂幓娌℃湁闂,浣嗘槸榪欎釜瀵瑰簲鐨凙CE_Time_Value鐨勫間篃涓嶅彲闈?鍦ㄧ壒瀹氭儏鍐典笅鍙兘浜х敓閲嶅ぇ浜嬫晠.

C++緙栫爜瑙勮寖錛?br />鍒濆鍖栧璞℃椂瑕佸畬鍏ㄣ?/p>

澹版槑涓涓粨鏋勪綋鍚庯紝濡傛灉瑕佸鍏跺垵濮嬪寲錛屽緩璁厛鎶婂畠璁句負0涔嬪悗鍐嶄綔鍚庣畫鎿嶄綔錛屽吇鎴愯繖鏍蜂竴涓範鎯紝灝變笉浼氬嚭鐜拌繖鏍烽儊闂風殑浜嬩簡銆?br />

鍘熻創鍑哄:
http://www.huihoo.com/forum/viewthread.php?tid=11016


mooyee



]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美电影在线播放| 亚洲高清视频在线| 一本一道久久综合狠狠老精东影业 | 久久精品卡一| 久久久久国产精品一区| 在线观看欧美| 亚洲人成免费| 国产精品网站在线观看| 久久精品噜噜噜成人av农村| 免费日韩成人| 亚洲在线一区| 久久久久久久久久久久久久一区| 亚洲国产欧美不卡在线观看| 亚洲激情不卡| 国产亚洲精品美女| 欧美激情一区二区三区高清视频| 欧美理论电影在线观看| 欧美在线视频一区二区| 久久这里有精品视频| 一本色道久久综合精品竹菊| 亚洲新中文字幕| 亚洲第一二三四五区| 99精品久久| 伊伊综合在线| 亚洲神马久久| 亚洲日韩欧美视频| 午夜精品久久久| 亚洲国产欧洲综合997久久| 在线亚洲自拍| 在线免费观看欧美| 在线播放不卡| 亚洲一级在线| 亚洲精选一区| 久久精品国产综合| 亚洲一区欧美二区| 欧美成人激情视频| 久久蜜桃香蕉精品一区二区三区| 欧美精品一区二区三区视频| 另类亚洲自拍| 亚洲人成网在线播放| 亚洲欧美国产制服动漫| 99re视频这里只有精品| 久久久精品国产免费观看同学 | 国产精品一区二区三区久久| 欧美wwwwww| 久久人人爽人人| 妖精视频成人观看www| 激情亚洲网站| 亚洲一区二区在线播放| 亚洲乱码国产乱码精品精可以看| 久久aⅴ国产欧美74aaa| 欧美制服第一页| 欧美性jizz18性欧美| 91久久久国产精品| 亚洲精品国产拍免费91在线| 久久久久久亚洲综合影院红桃| 欧美一区二区黄| 国产精品久久久久影院色老大| 亚洲福利国产精品| 亚洲国产人成综合网站| 久久天堂精品| 欧美chengren| 亚洲第一精品影视| 久久久青草青青国产亚洲免观| 久久久久国产精品午夜一区| 亚洲日本免费电影| 亚洲另类春色国产| 欧美精品导航| 亚洲日韩视频| 亚洲一区二区三区免费在线观看| 欧美精品一区二区三区在线看午夜 | 亚洲精品在线看| 欧美极品一区二区三区| 日韩系列在线| 亚洲欧美一级二级三级| 国产日韩精品视频一区二区三区| 亚洲自拍三区| 久久一二三区| 亚洲精品久久7777| 欧美日韩亚洲视频| 亚洲免费在线视频| 久久蜜桃香蕉精品一区二区三区| 影音先锋成人资源站| 欧美经典一区二区| 一区二区三区高清不卡| 欧美伊人久久大香线蕉综合69| 国产在线欧美日韩| 嫩草影视亚洲| 亚洲少妇最新在线视频| 欧美午夜精品一区| 亚洲欧美电影院| 美女性感视频久久久| 日韩视频精品在线| 国产精品国产| 久久综合久久美利坚合众国| 亚洲人成在线播放| 亚洲专区免费| 亚洲国产精品久久人人爱蜜臀 | 国产欧美视频一区二区| 久久综合给合久久狠狠色 | 欧美中文在线字幕| 欧美网站大全在线观看| 先锋影音网一区二区| 国内精品久久久久久久影视蜜臀| 久久成年人视频| 亚洲精品乱码久久久久| 午夜激情综合网| 亚洲高清视频的网址| 欧美性猛交视频| 免费观看在线综合色| 一本不卡影院| 欧美不卡视频一区| 欧美在线观看你懂的| 亚洲精品中文字幕在线观看| 国产欧美日韩在线观看| 欧美久久精品午夜青青大伊人| 欧美在线1区| 中日韩男男gay无套| 亚洲国产成人精品久久| 久久久久久久久伊人| 亚洲一区二区三区精品动漫| 欧美一级淫片aaaaaaa视频| 欧美激情精品久久久久久蜜臀| 久久综合狠狠综合久久激情| 99热这里只有精品8| 影音先锋一区| 国产亚洲精品一区二555| 欧美午夜激情在线| 欧美精品日韩综合在线| 一区二区三区视频免费在线观看| 精品二区久久| 国产精品永久免费| 欧美日韩一区二区免费在线观看| 欧美91福利在线观看| 久久精品成人| 久久精品亚洲精品| 久久激情久久| 欧美在线视频免费观看| 午夜亚洲伦理| 午夜在线电影亚洲一区| 亚洲欧美精品在线观看| 亚洲午夜视频在线| 亚洲午夜精品一区二区三区他趣| 99国产精品视频免费观看| 亚洲欧洲一级| 日韩亚洲精品视频| 亚洲视频狠狠| 亚洲无限av看| 亚洲欧美激情一区| 午夜在线一区| 久久精品视频导航| 久久午夜激情| 欧美福利精品| 欧美视频日韩| 国产精品jvid在线观看蜜臀| 午夜精品免费在线| 亚洲自拍高清| 久久久91精品国产| 久久亚洲国产成人| 欧美精品成人91久久久久久久| 欧美日韩成人| 国产精品免费小视频| 国产一区二区三区黄视频| 国产自产精品| 亚洲区在线播放| 一区二区三区蜜桃网| 校园春色综合网| 裸体丰满少妇做受久久99精品| 欧美激情精品久久久久久免费印度| 亚洲高清一二三区| 亚洲尤物在线视频观看| 久久久伊人欧美| 欧美日韩一区综合| 亚洲综合三区| 亚洲视频日本| 香港久久久电影| 老司机亚洲精品| 亚洲精品色婷婷福利天堂| 亚洲视频网站在线观看| 久久久久久久一区| 国产精品vip| 亚洲电影免费观看高清| 亚洲免费在线看| 欧美成人精品在线播放| 亚洲色图制服丝袜| 欧美gay视频激情| 国产日韩欧美亚洲| 99精品欧美一区二区三区 | 在线视频中文亚洲| 久久精品国产99国产精品| 欧美日韩国产色站一区二区三区| 国产午夜精品全部视频在线播放 | 国内精品久久久久久久果冻传媒| 亚洲毛片在线免费观看| 久久婷婷蜜乳一本欲蜜臀| 日韩亚洲欧美一区二区三区| 久久综合狠狠综合久久激情| 国产精品羞羞答答| 一区二区三区精品久久久| 麻豆国产精品一区二区三区 |