锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
姣曠珶榪欎釜涓滆タ綆楁槸鎴戜滑欏圭洰緇勭殑鍏ラ棬緇冧範錛屽綋騫村緢澶氭柊浜哄垰榪涙潵錛岃佺粍闀塊兘浼氭暀浠栦滑鐢∕FC/QT鍋氫釜璁$畻鍣ㄦ潵鐪嬬湅姘村鉤銆傜敱浜庡悇縐嶅師鍥狅紝鎴戝綋騫村掓槸娌℃湁鍙楀埌榪欑“紺奸亣”錛岀瓑鎴戠湡姝e紑濮嬪仛杞歡鐨勬椂鍊欙紝榪樻槸鏈嶅姟鍣ㄧ榪欐牱鐨勭函C++浠g爜鍋氬緱姣旇緝澶氥備絾鏄笉鍋氫笉鐭ラ亾錛屼竴鍋氭墠鍙戠幇UI鐨勯昏緫榪樻槸鎸哄鏉傜殑錛屾瘮濡傝錛屾寜“1”鏄拷鍔犲埌褰撳墠鏄劇ず榪樻槸瑕嗙洊鐜版湁鐨勬樉紺哄憿錛屾渶鍚庢妸閫昏緫寮勬竻妤氬掍笉鏄緢楹葷儲錛屼絾瑕佸啓鍑哄ソ鐪嬬殑浠g爜榪樻槸鏈夋瘮杈冨ぇ鐨勫樊璺濈殑銆?br />
浠ヤ笂閮芥槸鍓嶈█錛屽ソ鍍忔瘮杈冮暱……
瑕佽鐨勬槸錛屽湪榪欎釜榪囩▼涓彂鐜扮殑闂錛岃綆楃粨鏋滄槸嫻偣鏁幫紝瑕佹庝箞鍒ゆ柇鍏舵槸鍚﹁兘鏃犳崯鍦拌漿鎹㈡垚鏁存暟錛屼粠鑰屾秷闄ゅ皬鏁扮偣鍚庣殑涓孌墊棤鐢ㄧ殑“0”錛屼互鏇村ソ鍦版樉紺恒傜洿鎺ヤ笂浠g爜錛?br />
2 struct _floattype_meta
3 {
4 };
5
6 template<>
7 struct _floattype_meta<float>
8 {
9 enum {
10 EXPO_OFFSET = 23,
11 EXPO_LEN = 8
12 };
13
14 typedef uint32_t match_uint_type;
15 };
16
17 template<>
18 struct _floattype_meta<double>
19 {
20 enum {
21 EXPO_OFFSET = 52,
22 EXPO_LEN = 11
23 };
24
25 typedef uint64_t match_uint_type;
26 };
27
28 template <typename FloatType>
29 struct float_to_int
30 {
31 typedef struct _floattype_meta<FloatType> _meta;
32
33 bool operator() ( FloatType f, FloatType precision )
34 {
35 static const _meta::match_uint_type EXPO_MASK =
36 (~((~(_meta::match_uint_type)0) << _meta::EXPO_LEN )) << _meta::EXPO_OFFSET;
37 _meta::match_uint_type* pf = (_meta::match_uint_type*)&f;
38 uint32_t expo = ((*pf) & EXPO_MASK) >> _meta::EXPO_OFFSET;
39
40 static const uint32_t EXPO_FIRSTBIT_MASK = 1<< (_meta::EXPO_LEN-1);
41 static const uint32_t EXPO_BOUND = EXPO_FIRSTBIT_MASK - 1;
42 if ( expo >= EXPO_BOUND )
43 {
44 uint32_t to_right_move = expo - EXPO_BOUND;
45 if ( to_right_move >= _meta::EXPO_OFFSET )
46 {
47 return true;
48 }
49 uint32_t cmp_len = _meta::EXPO_OFFSET - to_right_move;
50 _meta::match_uint_type mask = ~(~((_meta::match_uint_type)0) << cmp_len);
51 return (*pf&mask) ? false : true;
52 }
53 else
54 {
55 return ( f < precision && f > -precision ) ? true : false;
56 }
57 }
58 };
鎴戠殑鏂規硶鏄氳繃嫻偣鍨嬬殑緇撴瀯鏉ヨ繘琛屽垽鏂?br />
嫻偣綾誨瀷涓鑸粨鏋勫涓嬶細
|+/-| exponent | tail |
瀵逛簬float錛屾寚鏁伴儴鍒嗕負8瀛楄妭錛屽熬鏁伴儴鍒嗕負23瀛楄妭銆?br />
鍒ゆ柇鏂規硶鏄紝璁$畻鎸囨暟鐨勫鹼紝鏍規嵁鍋忕Щ鍒ゆ柇灝忔暟鐐瑰悗鐨勫熬鏁幫紝鎯沖緱姣旇緝綆鍗曪紝姹楋紒
寮曞叆鍙傛暟綺懼害鏄負浜嗗垽鏂煎皬浜?鏃惰揪鍒版煇涓槇鍊肩殑鏃跺欏彲浠ュ皢鍚庨潰鐨勫皬鏁扮暐鍘匯?br />
Honestly錛屽叾瀹炶繖涓簲璇ュ彲浠ョ敤sprintf錛岀劧鍚庡垽鏂皬鏁扮偣鍚庣殑“0”鏉ュ疄鐜扮殑錛屼技涔庢洿鍔犵畝鍗曟柟渚褲?br />浣嗘槸鎴戣寰楋紝浣滀負涓涓?#8220;鐮佸啘”錛岄噸閫犺疆瀛愪篃鏄竴縐嶈叮鍛沖槢錛?img src ="http://www.shnenglu.com/neverwinter/aggbug/148964.html" width = "1" height = "1" />
]]>
鎻愮ず閾炬帴鏃禨SL鐨勭鍙鋒病鏈夋壘鍒幫紝浣嗘垜鏄濂戒簡openssl鐨勶紝涔熺壒鎰忔壘浜嗕竴涓嬶紝閮藉畨瑁呭湪/usr/涓?br>
鐒跺悗緲葷湅浜嗕竴涓媌uild/examples/IPC_SAP/SSL_SAP/涓嬬殑Makefile錛屾壘鍒?#8220;LIBS = -lrt -ldl”錛屾病鏈夋寚鏄巓penssl搴撶殑閾炬帴
閬傚姞涓婏紒锝?br>
LIBS = -lrt -ldl -lssl
緙栬瘧涔嬶紒锝?br>
build/test/SSL鐨勯棶棰樺悓瑙c?br>
涓嶇煡閬撳叾浠朙inux鍙戣鐗堟湁娌℃湁榪欐牱鐨勯棶棰橈紝榪樻槸鎴戠殑閰嶇疆鏈夐棶棰橈紝浣嗘葷畻鏈緇堢紪璇戝畬浜嗐?br>
]]>
5.鑷畾涔夌殑operator delete涓嶄細鑷姩鏋愭瀯瀵硅薄
]]>
鍏堜粙緇嶄竴涓嬫諱綋鐨勬儏鍐點傛垜浠」鐩鎴風鐨勫紑鍙戠幆澧冩槸VS2008+SP1錛岀敤鐨勬槸MFC綾誨簱錛岄噷闈㈠眳鐒剁敤鍒頒簡CMFCToolBar銆丆MFCMenuBar浠ュ強Appearance鍙樺寲絳夌殑SPI鏂扮壒鎬с傝“灞呯劧”鏄洜涓鴻繖浜涗笢瑗夸笉鏄」鐩繀瑕佺殑錛屽綋鏃跺彲鑳戒篃浠ヤ負鍙槸鍚嶅瓧鍙樹簡鐢ㄦ硶娌″彉錛屼及璁″湪宸ョ▼鍒涘緩鐨勬椂鍊欐牴鏈氨娌℃湁鑰冭檻榪欎簺錛岀洿鎺ユ寜鐫鍗曟枃妗e伐紼嬮粯璁ら厤緗紝next銆乶ext鐩存帴鍒涘緩瀹岀殑錛屽洤錛佸綋鏃跺仛鐨勬椂鍊欎篃鍙槸褰撲綔嫻嬭瘯Demo鏉ョ敤錛屼篃娌″お鍦ㄦ剰錛屾瘯绔熸垜浠」鐩殑閲嶇偣鍦ㄦ湇鍔″櫒鑰岄潪榪欎釜MFC瀹㈡埛绔?br>
鍚庢潵鐢變簬欏圭洰鍘熷洜錛岀敳鏂硅姹傛垜浠妸榪欎釜瀹㈡埛绔敖蹇慨鏀規垚涓涓彲浠ュ彂甯冪増鏈備笉鏀逛笉鐭ラ亾錛屼竴鏀瑰悡涓璺籌紝褰撳噯澶囧姩鎵嬩慨鏀瑰伐鍏鋒爮鏃舵墠鍙戠幇涓庝互鍓嶆儻鐨凜ToolBar鐪熷疄宸窛鐢氬ぇ銆侰ToolBar鍙互鐢–ImageList鎶婅嚜瀹氫箟鐨凚MP鍥劇墖鏀懼埌宸ュ叿鏍忕殑鎸夐挳錛岃緇嗗彲鐪?a >榪欓噷錛孋MFCToolBar鏍規湰灝變笉鏄繖鏍風殑涓涓帺娉曘傜洿鎺ユ斁涓涓狢ToolBar涓婃潵錛屽湪DockControlBar()鐨勬椂鍊欎細鍑虹幇鏂█閿欒錛堢己灝慏ockBar錛岃矊浼兼槸榪欎釜鍚嶅瓧錛屾睏錛侊級銆傚畾浣嶄唬鐮佸埌MainFrm鐨凟nableDocking()錛岀幇鍦ㄧ殑MainFrm鐨勭戶鎵垮叧緋繪槸CMainFrm->CFrameWndEx->CFrameWnd錛岃屼互鍓嶆槸CMainFrm->CFrameWnd錛孋FrameWndEx::EnableDocking()鏄負DockPane()鏈嶅姟鐨勶紝鑰孌ockControlBar()闇瑕佺殑DockBar騫朵笉浼氳鍒濆鍖栥傝皟鐢ㄥ熀綾葷殑CFrameWnd::EnableDocking()鍚庡啀DockControlBar()涓嶄細鍑虹幇鏂█錛屼絾鏄偅涓伐鍏鋒爮娌℃湁鏄劇ず銆傝屼笖鐜板湪鏂扮壒鎬т笅鍦ㄥ伐鍏鋒爮浣嶇疆鑳藉鎸夊嚭鍙抽敭鑿滃崟錛屼絾鍙抽敭鑿滃崟涓牴鏈笉鍙兘鏈夊叧浜庤CToolBar鐨勪俊鎭紝涔嶇湅璧鋒潵寰堜笉鍜岃皭~
鏈鍚庯紝姹傚姪鏈湴MSDN鏃犳灉錛岃矊浼糞P1娌℃湁鍖呭惈瀵筂SDN鏂囨。鐨勬洿鏂幫紱姹傚姪MSDN瀹樼綉錛岄偅涓湡鏄?#8220;璦綆鎰忚祬”銆傚彧鑳借錛孧S浣犺繖嬈$湡鐨?#8220;浜?#8221;浜嗭紒
浠ヤ笅涓篻oogle + vs2008 sp1 sample + 鐪嬩唬鐮佺殑鎴愭灉錛?br>
3 WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
4 //鑷畾涔夊伐鍏鋒爮
5 m_mybar.CreateEx(this, TBSTYLE_FLAT,
6 WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,
7 CRect(1,1,1,1), ID_MYBAR);
娉ㄦ剰錛學izard鐢熸垚鐨勫伐鍏鋒爮Create鏃舵病鏈夊甫ID錛屼絾絎簩涓伐鍏鋒爮Create鏃舵渶濂借甯D銆傚姞浜咺D涔嬪悗錛屽湪宸ュ叿鏍忓彸閿彍鍗曟墠浼氬嚭鐜扮浜屼釜宸ュ叿鏍忕殑CheckBox銆傚惁鍒欙紝涓嶈壇鍚庢灉鏈夛細1銆佸彸閿彍鍗曟病鏈夎宸ュ叿鏍廋heckbox錛?銆佹妸榛樿宸ュ叿鏍忓拰璇ュ伐鍏鋒爮鎷栧嚭鏉ワ紙嫻姩錛夛紝鍙互鐪嬪埌鍚嶅瓧閮芥槸涓鏍風殑錛堣嫳鏂囩増涓篠tandard錛夛紱3銆佸悗闈㈣鎻愬埌鐨刄serImage涓嶈兘浣滀負鎸夐挳鍥炬爣鏄劇ず銆?br>
鎴戜滑鍏堟潵鐪嬬湅CMFCToolBar鍔犺澆宸ュ叿鏍忕殑鍑芥暟鍘熷瀷錛?br>
2 UINT uiDisabledResID = 0, UINT uiMenuDisabledResID = 0, UINT uiHotResID = 0);
2 WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,
3 CRect(1,1,1,1), ID_MYBAR) ||
4 !m_mybar.LoadToolBar( IDR_TOOLBAR1, 0, 0, FALSE, 0, 0, theApp.m_bHiColorIcons?IDB_BITMAP1:0 ) )
5 {
6 TRACE0("Failed to create toolbar\n");
7 return -1; // fail to create
8 }
9 m_mybar.SetWindowText(_T("abc"));
2 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
3 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
4 m_mybar.EnableDocking(CBRS_ALIGN_ANY);
5 EnableDocking(CBRS_ALIGN_ANY);
6 DockPane(&m_wndMenuBar);
7 DockPane(&m_wndToolBar);
8 DockPane(&m_mybar);
CMFCToolBar鍙互璁╃敤鎴瘋嚜瀹氫箟宸ュ叿鏍忓浘鏍囷紝浣跨敤闈欐佹垚鍛樺嚱鏁癝etUserImages()灝嗕竴涓狢MFCToolBarImages瀵硅薄璁劇疆榪涘幓錛岀敱鎵鏈塁MFCToolBar瀵硅薄鍏變韓銆俉izard鑷姩鐢熸垚浠g爜涓湁榪欐牱鐨勪緥瀛愶細
2 {
3 // load user-defined toolbar images
4 if (m_UserImages.Load(_T(".\\UserImages.bmp")))
5 {
6 m_UserImages.SetImageSize(CSize(16, 16), FALSE);
7 CMFCToolBar::SetSizes(CSize(16,16), CSize(16,16));
8 CMFCToolBar::SetUserImages(&m_UserImages);
9 }
10 }
GetCmdMgr()->GetCmdImage()鍙互鏍規嵁宸ュ叿鏍忎笂鍥炬爣鐨処D鑾峰彇鍑哄凡鍔犺澆鍥炬爣鐨勭儲寮曞鹼細
鐗瑰埆鍦幫紝濡傛灉鍦ㄤ綘灝嗚繖浜涘伐鍏鋒爮鏀規潵鏀瑰幓浣嗘樉紺虹粨鏋滃嵈娌℃湁鏀瑰彉鐨勬椂鍊欙紝浣犲彲浠ュ皾璇曞垹闄?HKEY_CURRENT_USER\Software\Local AppWizard-Generated Applications\$(浣犵殑紼嬪簭鍚? 榪欎釜閿鹼紝褰撲綘閲嶅惎紼嬪簭鍚庡伐鍏鋒爮搴旇浼氭寜浣犵殑棰勬兂鍙樺寲鐨勩傝繖鏄垜鍦ㄦ煡璧勬枡鏃剁湅鍒扮殑錛屽綋鏃舵病娉ㄦ剰浣嗗悗鏉ュ彂鐜版尯鏈夌敤鐨勶紝鍑哄娌℃湁璁板綍涓嬫潵銆?br>
鏈鍚庯紝ReplaceButton榪樺彲浠ュ皢鎸夐挳鏇挎崲涓哄叾浠栨帶浠躲?br>
鎴戝湪鑷畾涔夊伐鍏鋒爮涓婂仛浜嗕竴涓湁鏁堝搷搴旓紝閲岄潰浣跨敤闈欐佹垚鍛樺嚱鏁癈MFCToolBar::ResetAllImages()灝嗘墍鏈夊浘鏍囬兘娓呯┖浜嗭紝姝ゆ椂浼氬彂鐜伴粯璁ゅ伐鍏鋒爮銆佽嚜瀹氫箟宸ュ叿鏍忕殑鍥炬爣閮戒負絀恒?br>
2 {
3 CMFCToolBar::ResetAllImages();
4
5 //CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
6
7 m_wndToolBar.LoadBitmap(IDB_BITMAP1);
8 m_mybar.LoadBitmap(IDR_MAINFRAME_256);
9 m_wndToolBar.RedrawWindow();
10 m_mybar.RedrawWindow();
11 }
Demo涓嬭澆
鈥斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺?br>濂藉惂錛岀粓浜庡啓瀹屼簡錛佸啓寰楀緢浠撲績錛屼笉瓚崇殑鍦版柟涔熷緢澶氾紝嬈㈣繋鎸囨暀錛?br>
]]>
鍦ㄨ繘琛岃澶囨爲錛堜篃灝辨槸涓涓狢TreeCtrl鎺т歡錛夋洿鏂頒慨鏀圭殑鏃跺欙紝閬囧埌浜嗕竴涓瘮杈僢ug鐨勯棶棰樸?br>
涓轟簡鎻愪緵鏇村ソ鐨勭敤鎴蜂綋楠岋紝鐢叉柟甯屾湜璁懼鏍戞洿鏂頒箣鍚庢粴鍔ㄦ潯浣嶇疆鑳藉淇濇寔涓庢洿鏂板墠涓鑷淬傝澶囨爲鐨勬洿鏂拌繃紼嬫槸榪欐牱鐨勶細鏇存柊娑堟伅鏉ヨ嚜Rimi鐨勯氱煡鏈哄埗錛岀被浼間簬鍑芥暟鍥炶皟錛屽鎴風鍦ㄦ敹鍒版秷鎭箣鍚庤皟鐢≧imi鐨勫璞℃柟娉曟潵鑾峰彇鏂扮殑璁懼鏍戜俊鎭紝鐒跺悗鏇存柊鏍戙備箥鐪嬩箣涓嬶紝瑕佸畬鎴愯繖涓慨鏀瑰ソ鍍忓緢綆鍗曪紝鍙鏇存柊鍓嶅厛璁板綍婊氬姩鏉$殑婊氬姩浣嶇疆錛屾洿鏂板悗榪樺師浣嶇疆錛屽鏋滄洿鏂板悗婊氬姩鏉℃粴鍔ㄨ寖鍥村彉鍖栦簡榪樿寰皟涓涓嬩綅緗紝閫昏緫涓婃潵璁插氨榪欎箞鍑犱釜姝ラ銆?br>
鎴戜竴寮濮嬩篃鏄寜鐓ц繖鏍風殑鎬濊礬錛孏etScrollPos()鑾峰彇褰撳墠婊氬姩鏉$殑婊氬姩浣嶇疆錛岀劧鍚庢洿鏂版爲錛堝厛鍒犻櫎鎵鏈夎妭鐐瑰啀閫愪釜娣誨姞錛屽叾浠栫渷鐣?..錛夛紝GetScrollRange()鑾峰緱鏂扮殑婊氬姩鑼冨洿錛屾渶鍚嶴etScrollPos()灝嗘棫鐨勪綅緗笌婊氬姩鑼冨洿鏈澶у間腑鏈灝忕殑涓涓鍥炲幓錛堣繖閲岀敤鍒扮殑ScrollBar鏄疌TreeCtrl鑷姩浜х敓鐨勶紝娉ㄦ剰涓嶆槸涓や釜鎺т歡錛岃繖閲岃皟鐢ㄧ殑鍑芥暟閮芥槸CTreeCtrl鐨勬柟娉曪級銆備絾瀹為檯鏁堟灉鏄紝鏍戞洿鏂板悗婊氬姩鏉℃粴鍒板噯紜殑浣嶇疆錛屼絾鏍戠殑瑙嗗浘鍒頒簡鏈欏訛紝鐐瑰嚮涓涓嬫粴鍔ㄦ潯鐨勯偅涓柟鍧楁墠鑳藉洖鍒頒箣鍓嶇殑浣嶇疆銆備篃灝辨槸璇達紝婊氬姩浣嶇疆鐨勬洿鏂頒笌鏍戠殑瑙嗗浘鍒嗙浜嗐?br>
涔嬪悗錛屾垜涓鐩翠互涓烘槸鎴戞帶浠剁殑鏂規硶鐢ㄩ敊浜嗭紝瀵圭潃MSDN鍜孋SDN綰犵粨浜嗗緢涔呫傛渶鍚庡繊鏃犲彲蹇嶏紝鑷繁鍐欎簡涓祴璇旸emo錛岄噷闈㈠氨涓Dialog錛屼竴CTreeCTrl錛屾爲涓婇殢渚垮姞浜嗕簺涓滆タ錛岀劧鍚庡張涓鎸夐敭錛屾寜閿悗浼氶噸鏂板埛鏂版爲錛屽啀婊氬姩鍒板師鏉ョ殑浣嶇疆錛岀粨鏋滃眳鐒舵槸瀵圭殑錛岃鍥捐窡鐫婊氬姩鏉$殑浣嶇疆鍙樺寲浜嗐備負浜嗘洿濂界殑妯℃嫙璁懼鏍戣妭鐐瑰鍒犵殑鏁堟灉錛屾垜鍦ㄦ寜閿搷搴斾笂鍙堜綔浜嗗鐞嗭紝鎸変竴涓嬮噸鍒鋒爲鐨勬椂鍊欎細闅愯棌鍑犱釜鑺傜偣錛屽啀鎸変竴涓嬭繖浜涜妭鐐規樉紺哄嚭鏉ワ紝婊氬姩浣嶇疆鎸夌収瀹㈡埛绔噷闈㈢殑涓涓鐞嗘柟娉曪紝緇撴灉灞呯劧涔熸槸姝g‘鐨勩傞棶棰樺彉寰楃巹涔庝簡錛?br>
鏃犳剰闂村彂鐜板鎴風閲岄潰鏈変釜鎵嬪姩鍒鋒柊璁懼鏍戠殑蹇嵎閿紝浼拌鏄綋騫磒b鍋氳皟璇曠殑鏃跺欑暀涓嬫潵鐨勩傚揩鎹烽敭鐨勫搷搴旂洿鎺ヨ皟鐢ㄦ洿鏂版爲鐨勫嚱鏁幫紝閲嶅埛鍚庣殑鏄劇ず鍑轟漢鎰忔枡鍦版槸瀵圭殑銆傛瘮杈冧竴涓嬩袱縐嶆洿鏂版柟寮忕殑榪囩▼錛?br>
Rimi錛?nbsp; 閫氱煡鍒版潵鈥?gt;鏇存柊鏍戯紙Rimi鍥炶皟鍑芥暟錛孯imi鑷繁緇存姢浜嗕竴涓嚎紼嬫睜錛岃繙紼嬭皟鐢ㄥ湪琚皟鐢ㄧ鐨勫彂璧瘋呴兘鏄疪imi鑷繁鐨勭嚎紼嬶級
蹇嵎閿細 鎸夐敭鍝嶅簲鈥?gt;鏇存柊鏍戯紙MFC娑堟伅澶勭悊鍑芥暟錛?br>
鏇存柊鏍戞墍鐢ㄥ埌鐨勬槸鍚屼竴涓嚱鏁幫紝浣嗚皟鐢ㄨ呭嵈鏄笉鍚岀殑銆傚洜涓篟imi鐢ㄤ簡boost::function錛岄偅鎴戜篃鍦ㄦ寜閿搷搴旂殑鏃跺欏瑕佽皟鐨勫嚱鏁扮敤function鏉ュ寘瑁呬竴涓嬶紝閫犳垚涓よ呭湪璋冪敤鏍堜笂璋冪敤鐨勫嚱鏁般侀『搴忓ぇ閮ㄥ垎鏄竴鑷寸殑錛屽彧鏈夋渶搴曞眰涓嶅悓錛屼竴杈規槸Rimi錛屼竴杈規槸MFC娑堟伅浼犻掋?br>
鍚庢潵jianhao璇達紝浠ュ墠鍦≧imi鐨勫洖璋冨嚱鏁伴噷闈㈣皟Rimi瀵硅薄鐨勬柟娉曞嚭榪囬棶棰橈紝鐒跺悗鎴戝張欏洪亾鍥炲繂璧蜂箣鍓峼xb鍦≧imi鍑芥暟錛堣繕鏄璞℃柟娉曪級閲岄潰璋僺ystem()涔熸湁闂銆?br>
闅鵑亾璇碦imi綰跨▼灝辨槸“涓囨伓涔嬫簮”錛熷ソ鍚э紝鎴戞妸鏇存柊浠g爜縐誨埌鍙﹀涓涓嚎紼嬮噷闈紝Rimi鍥炶皟鐨勬椂鍊欏敜閱掓洿鏂扮嚎紼嬶紝鏇存柊鍚庤鍥捐繕鏄笉鑳借窡鐫婊氬姩浣嶇疆鍙橈紱灝嗗揩鎹烽敭鐨勫搷搴斾篃淇敼涓涓嬶紝鑷繁涓嶄綔鏇存柊錛屼篃鏄敜閱掓洿鏂扮嚎紼嬶紝榪欎釜鏂規硶涔熷彉寰椾笉鐏典簡錛屽洤錛佽繖鍙互璇存槑闂璺烺imi綰跨▼鏃犲叧銆?br>
闅鵑亾璇寸嚎紼嬭皟鐢ㄦ墠鏄?#8220;涓囨伓涔嬫簮”錛熸妸涔嬪墠鍋氱殑閭d釜Demo灝忔敼浜嗕竴鎶婏紝綰跨▼鍋氬埛鏂幫紝鎸夐敭鍝嶅簲鍙敜閱掓洿鏂扮嚎紼嬶紝鏋滅劧涓嶇伒浜嗭紒涓婄綉google浜嗕竴鎶婏紝鍏抽敭瀛?#8220;mfc 綰跨▼ 鎿嶄綔鎺т歡”錛岄鍏堟槧鍏ョ溂甯樼殑鏄奙FC涓法綰跨▼鎿嶄綔鎺т歡浼氫笉浼氬嚭鐜板儚C#涓殑寮傚父闂?銆嬨傝繖鏃跺欐垜涔熶笉鍏沖績榪欎釜甯栧瓙鐨勫唴瀹逛簡錛岀嚎紼嬫搷浣滄帶浠舵湁寮傚父鏄惂錛岄偅灝變笉鐢ㄧ嚎紼嬪仛鍜紒榪欐椂鍊欐垜鎵嶅洖鎯寵搗WIN32閲岄潰鏈夎嚜瀹氫箟娑堟伅榪欑帺鎰忥紝MFC閲岄潰緇欏畾涓涓秷鎭疘D錛孫N_MESSAGE緇戝畾涓涓鐞嗗嚱鏁幫紝PostMessage鎴朣endMessage鏉ュ彂娑堟伅錛岀劧鍚庣敱WIN32鑷繁鐨勬秷鎭驚鐜潵璋冪敤澶勭悊鍑芥暟錛岃繖鏍峰簲璇ユ槸鍙互淇濊瘉鐢ㄩ潪Rimi綰跨▼鏉ユ洿鏂拌澶囨爲鐨勩傚啀涓嬈℃妸Demo灝忔敼浜嗕竴鎶婏紝鎸夐敭鍝嶅簲Post涓涓嚜瀹氫箟娑堟伅錛屾秷鎭鐞嗗嚱鏁板仛鍒鋒柊錛岀粨鏋滄槸瀵圭殑錛涘啀鏀癸紝鎸夐敭鍝嶅簲鍞ら啋綰跨▼錛岀嚎紼嬮噷闈ost鑷畾涔夋秷鎭紝緇撴灉涔熸槸瀵圭殑銆?br>
鍘熶互涓烘槸鎺т歡浣跨敤闂錛屽張浠ヤ負鏄疪imi涓嶅吋瀹歸棶棰橈紝鏈鍚庡疄璐ㄤ負MFC璺ㄧ嚎紼嬩嬌鐢ㄦ帶浠剁殑闂銆傚叾瀹炴垜涔熶笉娓呮榪欐槸涓嶆槸鐪熸鐨勯棶棰橈紝姣曠珶鎴慚FC鏃笉鎳傚張鐢ㄥ緱灝戙俆hat's all!
鏈鍚庨檮涓婃垜鐨勬祴璇曚唬鐮?br>http://www.shnenglu.com/Files/neverwinter/testtree.rar
]]>
絎竴涓槸鑷繁璁捐鐨勶紝瀵硅薄鎸佹湁瀹氭椂鍣紝鑷繁緇存姢鐢熷懡鍛ㄦ湡銆?br>
絎簩涓槸鏃犳剰涓亣鍒扮殑錛岀敱浜庨噰鐢╞oost鐨勭嚎紼嬪簱錛屽皢鎴愬憳鍑芥暟鍙樹負綰跨▼鐢紝鏈鍚庡湪涓鍫嗚皟鐢ㄤ箣鍚庡眳鐒舵妸鑷繁鏉鎺変簡銆?br>
寰堜笉騫哥殑鏄紝鍦ㄨ繃紼嬩腑閮介亣鍒頒簡鐩稿悓鐨勯棶棰樷斺斿爢鏍堟寕鎺変簡銆?br>
鐒跺悗涓杞畾浣嶏紝灞呯劧閮芥槸boost mutex鐨勯棶棰橈紝scoped_lock寰堝鏄撹浜烘斁鏉捐鎯曘?br>
)
{
boost::recuisive_mutex::scoped_lock lk(m_mutex);
YYYY();
}
void YYY()
{
delete p;// 閲婃斁XXX鎵鍦ㄥ璞?br>
}
浣滀負綾繪垚鍛樼殑mutex娌℃湁琚В閿侊紝鐒跺悗鎵鍦ㄧ殑綾誨氨琚噴鏀句簡錛岃繖灝遍犳垚浜嗗爢鏍堟寕鎺夈?br>
瀵硅薄鑷潃鏄劇劧涓嶆槸涓縐嶅緢濂界殑椋庢牸錛岃繕鏄敖閲忛伩鍏嶅惂錛?br>
]]>
2.涓嶈兘鏀瑰彉璇ョ┖鏂囦歡鐨勫ぇ灝忋?br>
涓寮濮嬫槸鐢╫fstream鍋氱殑錛屼絾鏄瘡嬈′竴鎵撳紑鏂囦歡錛屽師鏉ョ殑絀烘枃浠剁殑澶у皬灝辨敼鍙樹簡銆備箣鍚庣敤app鏂瑰紡鎵撳紑錛屼絾鏄瘡嬈$殑鏂版暟鎹兘鏄拷鍔犲埌鏂囦歡灝鵑儴錛宻eekp鏃犺濡備綍涓嶈兘鍒拌揪瀹為檯鏂囦歡鐨勯閮紝榪欐牱鏂囦歡澶у皬灝卞彉浜嗭紝涓嶇鍚堥渶姹?銆?br>
鍚庢潵鍙戠幇鐢╢stream錛岄噰鐢╥n | out鐨勬柟寮忔潵鎵撳紑錛岀粓浜庡彲浠ュ畨鍏ㄥ湴鏀瑰啓鏂囦歡浜嗐?br>
]]>
2 using namespace std;
3
4 void RefAsParam(int (&aRR)[5])
5 {
6 cout << aRR[3] << endl;
7 }
8
9 template < size_t SZ >
10 void RefAsParamT(int (&aRR)[SZ])
11 {
12 cout << aRR[0] << endl;
13 }
14
15 void main()
16 {
17 int a[5] = { 1, 2, 3, 4, 5};
18
19 RefAsParam( a );
20
21 RefAsParamT( a );
22
23 getchar();
24 }
榪欎釜鏄笂嬈″湪鏌恇log鍙嬪洖甯栨椂鏈夋劅鍐欑殑涓涓緥瀛愮▼搴忋?br>
鐜板湪鎶婄洰鍏夋斁鍦?span style="color: #000000;">RefAsParamT鍑芥暟錛岄噰鐢ㄩ潪綾誨瀷妯℃澘鐨勬柟寮?/span>浣挎暟緇勫紩鐢ㄤ綔涓哄叆鍙傦紝涔嶇湅濂藉儚寰堢埥錛屼笉闇瑕佸湪鍑芥暟瀹氫箟鏃舵寚瀹氭暟緇勭殑澶у皬錛屾瘮闈炴ā鏉挎柟寮忕殑RefAsParam鏈夋瀬澶х殑閫氱敤鎬с?br>
浣嗘槸錛屼粠妯℃澘鐢熸垚鐨勮搴︽潵鐪嬶紝瀵逛簬涓嶅悓鐨凷Z灝變細浜х敓涓嶅悓鐨?span style="color: #000000;">RefAsParamT<SZ>鍑芥暟錛屾晥鐜囦笂璇翠笉榪囧幓錛岃櫧璇磋繖浜涗唬鐮佹槸緙栬瘧鍣ㄤ唬鏇夸漢鎵嬪啓鐨勩?br>
鍐嶄粠鏁扮粍寮曠敤浣滀負鍏ュ弬鐨勮搴︾湅錛屼釜浜鴻涓烘暟緇勫紩鐢ㄥ乏鍏ュ弬鐨勬剰涔変笉澶э紝鐗瑰埆鏄浜庡姩鎬佸垎閰嶏紙new錛夌殑鏁扮粍錛岃繖涓や釜鍑芥暟閮芥棤鏁堛?br>
鏈鍚庯紝STL涓厛闂悗寮鐨勬柟寮忔潵鎸囧畾鏁扮粍鑼冨洿錛岃繖鏍風殑閫氱敤鎬у拰鏁堢巼閮芥瘮杈冨ソ銆?br>
浠ヤ笂錛屼釜浜烘剼瑙侊紒
]]>
2 #include <boost/date_time/gregorian/gregorian.hpp>
3 #include <iostream>
4 #include <stdint.h>
5
6 int main()
7 {
8 using namespace boost::posix_time;
9 using namespace boost::gregorian;
10
11 ptime ptNow( second_clock::local_time() );
12 std::cout << to_simple_string( ptNow ) << std::endl;
13
14 tm tm1 = to_tm( ptNow );
15 time_t tt = mktime( &tm1 );
16
17 tm* tm2 = localtime( &tt );
18
19 ptime ptt = from_time_t( tt );
20 ptime pttm = ptime_from_tm( tm1 );
21 std::cout << to_simple_string( ptt ) << "\n" << to_simple_string( pttm ) << std::endl;
22
23 return 0;
24 }
杈撳嚭緇撴灉錛?br>2009-Sep-10 15:24:10
2009-Sep-10 07:24:10
2009-Sep-10 15:24:10
絎竴涓負ptime鑾峰緱鐨勫綋鍓嶆椂闂寸殑杈撳嚭銆?br>絎笁涓負ptime杞負tm錛屽啀tm杞垚ptime鐨勮緭鍑?br>絎簩涓負閭d釜tm杞垚time_t錛宼ime_t鍐嶈漿鍥瀙time鐨勮緭鍑恒?br>
浠庣粨鏋滅湅錛岀浜屼釜杈撳嚭鐨勬椂闂村緢璇″紓涓婂眳鐒跺樊浜?涓皬鏃訛紝闅鵑亾鏄疷TC鏃墮棿錛熶絾boost doc閭i噷娌℃湁榪欎釜璇存槑錛屽彧鏄鐢╢rom_time_t鍙互灝唗ime_t杞垚ptime銆傜▼搴忎腑闂村皢time_t鐢╨ocaltime杞洖tm浣滈獙璇侊紝緇撴灉鏄紜殑銆?br>
璇″紓浜?#8230;…
]]>
2 #include <string>
3
4 class A
5 {
6 public:
7 A( const std::string &str )
8 {
9 m_szS = str;
10 }
11
12 A( const A &rhs )
13 {
14 m_szS = rhs.m_szS;
15 }
16
17 A& operator= ( const A &rhs )
18 {
19 if ( this == &rhs )
20 {
21 return *this;
22 }
23
24 m_szS = rhs.m_szS;
25 return *this;
26 }
27
28 std::string m_szS;
29 };
30
31 int main()
32 {
33 //!< 甯﹀弬鏁板熀鏈瀯閫狅紝闈瀍xplicit
34 A a1("SB");
35
36 //!< 涓嶈兘閫氳繃鍩烘湰鏋勯犲畬鎴愶紝瀹炶川涓婅皟鐢ㄧ殑鏄a1鐨勬嫹璐濇瀯閫?/span>
37 A a2 = a1;
38
39 //!< 楠岃瘉璧嬪兼搷浣滅
40 A a3("SC");
41 a3 = a1; // here
42
43 return 0;
44 }
45
鎬葷粨錛?br>1.瀹炰緥鍖栦竴涓璞$殑鏃跺欙紝濡傛灉鐢ㄥ彟涓涓凡鏈夊璞″鍏惰繘琛岃祴鍊鹼紝瀹炶川涓婅皟鐢ㄧ殑鏄嫹璐濇瀯閫犲嚱鏁幫紝濡備笂榪扮殑a2銆?br>2.瀵逛竴涓凡瀹炰緥鍖栧璞¢噰鐢ㄨ祴鍊兼搷浣滅瀵瑰叾榪涜璧嬪鹼紝璋冪敤鐨勬槸璧嬪兼搷浣滅閲嶈澆鐨勫嚱鏁幫紝濡俛3銆?br>
鍐欏緱鏈夌偣浠撲績錛屽鏈変笉鍚屾剰瑙侊紝嬈㈣繋鎷嶆澘錛?br>
]]>
2 #include <iostream>
3 namespace myspace
4 {
5 template <class T>
6 class auto_ptr
7 {
8 T *t; // 鎸囬拡瀵硅薄
9 size_t *use; // 寮曠敤璁℃暟錛岄噰鐢ㄦ寚閽堢殑鏂瑰紡鏄負浜嗘柟渚垮涓猘uto_ptr鐨勫叡浜?/span>
10 public:
11 //!< 涓鑸瀯閫犲嚱鏁?/span>
12 auto_ptr(T *obj)
13 : t(obj) // 鎺ユ敹鎸囬拡
14 , use(new size_t(1)) // 鍒涘緩寮曠敤璁℃暟
15 {
16 }
17 //!< 鎷瘋礉鏋勯犲嚱鏁?/span>
18 auto_ptr(const auto_ptr<T> &ptr)
19 : t(ptr.t)
20 , use(ptr.use)
21 {
22 ++*(ptr.use); // 浼犻掑紩鐢ㄨ鏁板悗錛岃鏁板?1
23 }
24 ~auto_ptr()
25 {
26 // 姣忔鏋愭瀯鐨勬椂鍊欙紝濡傛灉璁℃暟鍊間負0鍒欏垹闄ゅ璞?/span>
27 if (--*use == 0)
28 {
29 delete t;
30 delete use;
31 }
32 }
33 //!< ->鎿嶄綔絎﹂噸杞?/span>
34 T* operator-> () const
35 {
36 return t;
37 }
38 //!< *鎿嶄綔絎﹂噸杞斤紝榪斿洖鎸囬拡瀵硅薄鐨勫紩鐢?/span>
39 T& operator* () const
40 {
41 return *t;
42 }
43 };
44
45 //!< 嫻佽緭鍑猴紝閲囩敤浜?鎿嶄綔絎︼紝鎵浠ヤ笉闇瑕佽涓篺riend
46 template <class Type>
47 std::ostream& operator<< (std::ostream &os, auto_ptr<Type> ptr)
48 {
49 os << *ptr;
50 return os;
51 }
52 }//end of myspace
53
54 // main.cpp
55 #include <iostream>
56 #include "auto_ptr.h"
57 #ifdef _DEBUG
58 #define new new (_NORMAL_BLOCK, __FILE__, __LINE__)
59 #endif
60 int main(int argc, _TCHAR* argv[])
61 {
62 myspace::auto_ptr<int> iptr(new int(9)) ;
63 std::cout << iptr << std::endl;
64 ++ *iptr;
65 std::cout << iptr << std::endl;
66 (*iptr) --;
67 std::cout << iptr << std::endl;
68 getchar();
69 return 0;
70 }
71
浠庝笂闈㈢殑Demo涓紝鍙互鐪嬪埌榪欎釜鏅鴻兘鎸囬拡鐨勭己鐐癸細
姣忔鍒涘緩鏅鴻兘鎸囬拡鐨勬椂鍊欙紝浼犲叆鐨勬寚閽堟槸瀵瑰鏆撮湶鐨勶紝閲囩敤new鐨勬柟寮忎綔涓哄叆鍙傛墠鑳戒繚璇佸畨鍏ㄧ殑銆傚鏋滆繖涓猲ew鍑烘潵鐨勫璞★紙濡備笂闈㈢殑int錛?錛夛級鍦ㄥ埆澶勮delete浜嗭紝緇х畫浣跨敤榪欎釜鏅鴻兘鎸囬拡鐩稿綋浜庝嬌鐢ㄤ竴涓噹鎸囬拡銆傝繖鏍風殑闂鍗充究鏄痓oost鐨剆hare_ptr涔熸槸浼氭湁鐨勩?br>
]]>
Chapter One - 璋冪敤鏋勯犲嚱鏁板鎴愬憳鍙橀噺榪涜鏋勯犮佸垵濮嬪寲
鍦ㄧ被鏋勯犵殑鏃跺欙紝瀵逛簬綾繪垚鍛樺彉閲忕殑鏋勯犺矊浼煎彲浠ュ湪鏋勯犲嚱鏁頒腑瀹屾垚錛岄偅涓轟粈涔堣繕闇瑕佹垚鍛樺垵濮嬪寲琛ㄥ憿錛?br> 鎴戜滑鏉ョ湅鐪嬭繖鏍風殑鎯呭喌錛?br>
2 class Base
3 {
4 public:
5 Base(int val)
6 : i(val) //榪欓噷涓轟粈涔堣鏀懼湪鎴愬憳鍒濆鍖栬〃鍛紵
7 {
8 //i = val??
9 }
10 ~Base(){}
11
12 private:
13 int i;
14 };
15
16 class UseBase
17 {
18 Base b;
19 public:
20 UseBase(){} //娌℃湁鐢˙ase鐨勬瀯閫犲嚱鏁?/span>
21 ~UseBase(){}
22 };
23
24 int main()
25 {
26 return 0;
27 };
28 /* end of programme 1 */
紼嬪簭鍑虹幇榪欐牱鐨勯敊璇細error C2512: 'Base' : no appropriate default constructor available錛屽湪UseBase涓瑽ase娌℃湁琚悎鐞嗗湴鍒濆鍖栥?br>
2
3 //
4
5 class UseBase
6 {
7 Base b;
8 public:
9 UseBase() : b(0){} //鍙互緙栬瘧閫氳繃
10 ~UseBase(){}
11 };
12
13 //
14
15 /* end of programme 2 */
鐢辨鍙互鐪嬪嚭鎴愬憳鍒濆鍖栧垪琛ㄧ殑涓涓鐐癸紝璋冪敤鏋勯犲嚱鏁板鎴愬憳鍙橀噺榪涜鏋勯犮佸垵濮嬪寲銆傚浜庡唴緗垚鍛樺彉閲?int銆乨ouble絳夌瓑錛屼釜浜虹悊瑙d負C璇█涓氨宸茬粡鏈夌殑綾誨瀷錛岃緇嗕俊鎭弬瑙丳rimer)鑰岃█娌℃湁鏄庢樉鐨勯棶棰橈紝浣嗗浜庨潪鍐呯疆鎴愬憳鍙橀噺鑰岃█錛屽嵆渚跨紪紼嬭呮病鏈夊湪鎴愬憳鍒濆鍖栬〃涓樉紺鴻皟鐢ㄦ瀯閫犲嚱鏁幫紝緙栬瘧鍣ㄤ篃浼氶殣寮忓湴璋冪敤榛樿鏋勯犲嚱鏁般傛墍璋?#8220;榛樿鏋勯犲嚱鏁?#8221;灝辨槸鎸?$classname$(void)"榪欐牱鐨勫艦寮忋備笂闈㈢殑渚嬪瓙灝辨槸鍥犱負榪欎釜鍘熷洜鑰岀紪璇戝け璐ョ殑錛孊ase娌℃湁鎻愪緵榛樿鏋勯犲嚱鏁般備篃灝辨槸璇達紝闇瑕佺壒孌婃瀯閫犵殑綾誨繀欏誨湪鎴愬憳鍒濆鍖栧垪琛ㄨ繘琛屾瀯閫犮佸垵濮嬪寲銆?br>
鑰屽鏋滄湁榛樿鏋勯犲嚱鏁幫紝鏄惁灝卞彲浠ュ湪鎴愬憳鍒濆鍖栬〃涓疆涔嬩笉鐞嗗憿錛熺瓟妗堟槸鍚﹀畾鐨勶紝榪欐秹鍙婂埌鏁堢巼闂銆傦紙浠ヤ笅紼嬪簭鍙互涓殑Base瀹屽叏鍙互鐢╯tring綾誨瀷鏉ュ彇浠o紝浣嗕負浜嗘柟渚胯皟璇曟柟寮忔煡鐪嬶紝鎵浠ラ噸鏂扮紪鍐欎簡Base銆傦級
2
3 class Base
4 {
5 public:
6 Base(void)
7 : i(0)
8 {
9 // breakpoint 1
10 }
11 // 璧嬪兼搷浣滅閲嶈澆
12 Base& operator= ( const int val )
13 {
14 i = val;// breakpoint 2
15 return *this;
16 }
17
18 ~Base(){}
19
20 private:
21 int i;
22 };
23 class UseBase
24 {
25 Base b;
26 public:
27 UseBase()
28 //: b(0)
29 {
30 b = 3;// breakpoint 3
31 }
32 ~UseBase(){}
33 };
34
35 int main()
36 {
37 UseBase ub;
38 return 0;
39 };
40 /* end of programme 3 */
breakpoint鐨勯『搴忎負1-3-2錛岃繖璇存槑UseBase涓殑Base鏃㈣繘琛屼簡榛樿鏋勯狅紝涔嬪悗鍙堣繘琛屼簡璧嬪鹼紝鍘熸湰鍙互閫氳繃涓涓瀯閫犲嚱鏁板畬鎴愮殑鎿嶄綔錛岀幇鍦ㄥ垎鎴愪簡涓や釜姝ラ錛屾晥鐜囬檷浣庝簡銆?br>
Chapter Two - 媧劇敓綾葷殑鎴愬憳鍒濆鍖栬〃
鍦ㄦ淳鐢熺被鐨勬垚鍛樺垵濮嬪寲琛ㄤ腑錛屽彲浠ヨ皟鐢ㄥ熀綾葷殑鏋勯犲嚱鏁版潵鍒濆鍖栧叾鍩虹被鎴愬垎銆?br>
2 #include <iostream>
3 using namespace std;
4 class Base
5 {
6 public:
7 Base( const int val )
8 : i(val)
9 {
10 }
11
12 Base& operator= ( const int val )
13 {
14 i = val;
15 return *this;
16 }
17
18 virtual ~Base(){}
19
20 void print() const
21 {
22 cout << "val: " << i << endl;
23 }
24
25 private:
26 int i;
27 };
28
29 class Derived : public Base
30 {
31 public:
32 Derived( const int val )
33 : Base(val)
34 {}
35 };
36
37 int main()
38 {
39 Derived d(1);
40 d.print();
41 getchar();
42 return 0;
43 };
44 /* end of programme 4 */
涓涓皬閿欒錛屽緢澶氫漢鍙兘浼氱姱鐨勶細
2 //
3
4 class Derived : public Base
5 {
6 public:
7 Derived( const int val )
8 //: Base(val)
9 {
10 Base(val);
11 }
12 };
13
14 //
15 /* end of programme 5 */
鍦ㄦ瀯閫犲嚱鏁頒綋鍐呯洿鎺ヨ皟鐢ㄥ熀綾葷殑鏋勯犲嚱鏁幫紝浣嗚繖鏍鋒槸涓嶈兘瀹屾垚瀵瑰熀綾繪垚鍒嗙殑鍒濆鍖栫殑銆傝繖涓鍙ョ殑鎰忎箟鏄垱寤轟竴涓復鏃剁殑Base瀵硅薄銆?br>
Chapter Three - 鍒濆鍖朿onst銆佸紩鐢ㄦ垚鍛?/span>
鍒╃敤鎴愬憳鍒濆鍖栬〃鑳藉鍒濆鍖朿onst銆佸紩鐢ㄦ垚鍛橈紝榪欏湪鏋勯犲嚱鏁頒綋鍐呮槸鏃犳硶鍋氬埌鐨勩傚洜涓轟竴鑸儏鍐典笅錛宑onst銆佸紩鐢ㄧ殑瀵硅薄鍦ㄥ0鏄庣殑鏃跺欏氨瑕佸悓鏃跺皢鍊兼垨瀵硅薄緇戝畾鍒頒竴璧楓?br>
2 #include <iostream>
3 #include <string>
4 using namespace std;
5 class dummy
6 {
7 const int ci;
8 string& szStr;
9
10 public:
11 dummy(const int i, string &sz)
12 : ci(i)
13 , szStr(sz)
14 {}
15
16 void printi()
17 {
18 cout << "const int: " << ci << endl;
19 }
20
21 void printsz()
22 {
23 cout << "string&: " << szStr << endl;
24 }
25
26 void setsz(string &sz)
27 {
28 szStr = sz;
29 }
30 };
31
32 int main()
33 {
34 string _4ref("hello");
35 dummy d(10, _4ref);
36 d.printi();
37 d.printsz();
38 cout << endl;
39 d.setsz( string("goodbye") );
40 d.printsz();
41 cout << "_4ref: " << _4ref << endl;
42 getchar();
43 return 0;
44 };
45 /* end of programme 6 */
杈撳嚭緇撴灉
const int: 10
string&: hello
string&: goodbye
_4ref: goodbye
]]>
鍓嶅嚑澶╋紝鎸夌収榪欎釜渚嬪瓙錛岃嚜宸卞皝瑁呬簡涓濂楀洓鍒欒繍綆楄〃杈懼紡綾伙紝閲嶇幇浜嗕竴涓嬭繖鏍風殑璁捐妯″紡銆?br>
鐒跺悗錛屽仛浜嗕竴涓猵arser鏉ヨВ鏋愯〃杈懼紡錛屼笉榪囧仛寰楀緢鎼擄紝stringstream瀵逛簬鎷彿鐨勮鍙栨湁闂……涓嶈繃涓昏鍔熻兘宸茬粡鍩烘湰瀹炵幇浜嗐?br>
鐜頒笂浼犱唬鐮侊細
http://www.shnenglu.com/Files/neverwinter/Expression.zip
鐜鏄痸s2008 SP1錛岄噷闈㈢敤鍒頒簡boost鐨剆hared_ptr銆?br>
parser鐨勮璁″疄鍦ㄥお鐑傦紝濡傛灉鏈変粈涔堥珮瑙佽鎸囨暀涓涓嬶紒锝?br>
PS錛氱湅鍒板埆浜虹敤boost::spirit鏉ュ仛鍚屾牱鐨勮〃杈懼紡鍒嗘瀽璁$畻錛屽眳鐒?0澶氳浠g爜灝卞畬緹庡疄鐜頒簡錛堣繕鍖呮嫭鎻愮ず淇℃伅錛夈傚彲瑙侊紝boost鐨勬綔鍔涙槸鍗佸垎澶х殑錛屼互鍚庝竴瀹氳濂藉ソ瀛︿範銆佹寲鎺樹竴涓嬨?br>
]]>