锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍦ㄥ疄闄呯殑boost signal涓茍娌℃湁鐩存帴鐨勫瓨鍌?/span>slot錛?/span>boost signal搴撲腑鏈変釜slot綾伙級錛岃屾槸瀛樺偍浜?/span>function錛?/span>boost function綾葷殑瀵硅薄錛夊璞°傝屼笖涓轟簡鏂逛究鎺у埗signal涓?/span>function涔嬮棿鐨勮仈緋伙紝寮曞叆浜?/span>connection綾伙紝鐢ㄦ潵琛ㄧずsignal涓?/span>function涔嬮棿鐨勮仈緋匯?/span>Connection鐨勫璞″綋鐒跺拰涓涓?/span>function鏀懼湪浜嗕竴璧楓傝繖鏍?/span>boost signal鎻愪緵浜嗕竴涓?/span>connection_slot_pair綾繪潵瀛樺偍涓涓?/span>function涓?/span>connection瀵廣傝繖鏍峰湪boost signal涓竴涓?/span>slot緇勭殑瀹為檯瀹氫箟濡備笅std::list< connection_slot_pair >銆傚茍涓旇閲嶅畾涔変負group_list綾誨瀷錛?/span>typedef std::list<connection_slot_pair> group_list錛夈傜浉搴旂殑鍦?/span>boost signal涓?/span>map鐨勫疄闄呭畾涔夊涓?/span>std::map<stored_group, group_list, compare_type>錛屽茍涓旇閲嶅畾涔変負slot_container_type錛?/span>typedef std::map<stored_group, group_list, compare_type> slot_container_type錛夈傚皢浠ヤ笂鐨勮繖浜涗笢瑗跨粍緇囧埌涓涓被涓紝浠ヤ究浜庣鐞嗐傝繖涓被灝辨槸named_slot_map銆?/span>Signal涓湡姝g敤鏉ョ鐞?/span>slot鐨勭鐞嗗櫒銆?/span> Named_slot_map鐨勭被鏁版嵁鎴愬憳濡備笅瀹氫箟錛?/span>boost婧愮爜涓殑涓閮ㄥ垎錛屾暟鎹垚鍛橀儴鍒嗭級 class BOOST_SIGNALS_DECL named_slot_map { public: typedef named_slot_map_iterator iterator;//named_slot_map瀹瑰櫒鐨勮凱浠e櫒 private: typedef std::list<connection_slot_pair> group_list;//function connection瀵圭粍綾誨瀷 typedef std::map<stored_group, group_list, compare_type> slot_container_type;//瀹瑰櫒綾誨瀷 typedef slot_container_type::iterator group_iterator;//瀹瑰櫒榪唬鍣ㄧ被鍨?/span> typedef slot_container_type::const_iterator const_group_iterator; slot_container_type groups;//瀹氫箟涓涓敤鏉ョ鐞?/span>function connection緇勭殑瀹瑰櫒瀵硅薄 group_iterator back;//瀹瑰櫒鐨勮凱浠e櫒瀵硅薄 }; Named_slot_map涔熸槸涓涓鍣ㄣ?/span>Stl鐨勫鍣ㄤ負浜嗗鐣屾柟渚胯闂鍣ㄥ唴鏁版嵁鍗曞厓錛屾彁渚涗簡榪唬鍣ㄣ?/span>Named_slot_map涔熸湁鑷繁鐨勮凱浠e櫒銆傝繖涓凱浠e櫒灝辨槸named_slot_map_iterator綾匯?/span>Named_slot_map鎻愪緵浜嗕互涓嬫柟娉曟潵鑾峰緱榪唬鍣?/span>iterator begin()錛?/span>iterator end()銆?/span>Begin鏂規(guī)硶鎻愪緵棣栬凱浠e櫒錛?/span>end鏂規(guī)硶鎻愪緵灝捐凱浠e櫒銆傚悜瀹瑰櫒涓彃鍏ユ暟鎹敤insert銆傛竻闄ゆ煇涓暟鎹敤鑰岃岀劧erase錛屾竻絀哄鍣ㄤ腑鐨勬墍鏈夋暟鎹敤clear銆?/span> 銆銆涓漢瑙夊緱鍦╯lot<>涓殑鏈鏈夌敤澶勭殑鍑芥暟銆?br>void slot_base::create_connection() { scoped_connection safe_connection(data->watch_bound_objects); for(std::vector<const trackable*>::iterator i = data->bound_objects.begin(); BOOST_SIGNALS_NAMESPACE::detail::auto_disconnect_bound_object disconnector(binding); con->bound_objects.push_back(binding); safe_connection.release(); 2錛宻tatic瀵硅薄灝嗗瓨鍌ㄥ湪紼嬪簭鐨勯潤鎬佸瓨鍌ㄥ尯涓紝鑰屼笉鏄湪鍫嗘爤涓傝繖涓璞″彧鍦ㄦ眽涔︾涓嬈¤皟鐢ㄦ槸鍒濆鍖栵紝鍏跺悗涓嶇敤鍐嶅垵濮嬪寲銆?/p>
3錛屽浜庨潤鎬佸璞$殑鍒濆鍖栵紝闆惰祴鍊煎彧瀵歸瀹氫箟瀵硅薄鏈夋晥錛岀敤鎴瘋嚜瀹氫箟鐨勭被鍨嬪繀欏葷敤鏋勯犲嚱鏁板垵濮嬪寲銆?/p>
4錛岄潤鎬佸璞$殑鏋愭瀯鍑芥暟鍦ㄧ▼搴忕殑main()鍑芥暟閫鍑烘椂錛屾垨鑰呮爣鍑哻鍑芥暟exit()璋冪敤鏃舵墠琚皟鐢ㄣ傚湪鏋愭瀯鍑芥暟涓皟鐢╡xit()鏄緢鍗遍櫓鐨勶紝鍥犱負榪欐牱鍙兘寮曡搗姝誨驚鐜?/p>
5錛岄潤鎬佸璞$殑閿姣佹槸鎸夊畠浠垵濮嬪寲鐨勭浉鍙嶉『搴忚繘琛岀殑銆傚叏灞瀵硅薄鎬繪槸鍦╩ain()鎵ц涔嬪墠琚垱寤恒傚鏋滀竴涓寘鍚潤鎬佸璞$殑鍑芥暟浠庢病鏈夎璋冪敤榪囷紝閭d箞榪欎釜瀵硅薄鐨勬瀯閫犲嚱鏁板氨娌℃湁琚墽琛岋紝鎵浠ヤ篃灝變笉浼氳皟鐢ㄦ瀽鏋勫嚱鏁?/p>
6錛屼竴涓鏄庣‘澹版槑涓簊tatic鐨勫璞℃垨鍑芥暟鐨勫悕瀛楀緙栬瘧鍗曞厓鏉ヨ鏄眬閮ㄥ彉閲忥紝榪欎簺鍚嶅瓧鏈夊唴閮ㄨ繛鎺ャ傜被澹版槑鍜屽眬閮ㄥ彉閲忔病鏈夎仈鎺ャ?/p>
7錛宔xtern琛ㄧず璇ュ悕瀛楀鎵鏈夌殑緙栬瘧鍗曞厓鏄彲瑙佺殑錛岀敤static鍜宔xtern闄愬畾鐨勫璞℃繪槸椹葷暀鍦ㄩ潤鎬佹暟鎹尯 8錛屾櫘閫氬嚱鏁版槸澶栭儴榪炴帴鐨?/p>
9錛岀被鐨勯潤鎬佹垚鍛樻嫢鏈変竴鍧楀崟鐙殑瀛樺偍鍖?鑰屼笉綆℃垜浠垱寤轟簡澶氬皯涓綾葷殑瀵硅薄錛岃繖灝變負榪欎簺浜嗗垱寤轟簡涓涓氫俊鐨勬柟娉曘?/p>
10錛岄潤鎬佹垚鍛樼殑瀹氫箟蹇呴』鍑虹幇鍦ㄥ閮紝鑰屼笖鍙兘鏈変竴嬈?/p>
11錛屼竴涓被鐨勯潤鎬佸父閲忓彲浠ヨ鐢ㄤ綔涓涓紪璇戞椂甯擱噺 12錛屽湪灞閮ㄧ被(鍦ㄥ嚱鏁板唴閮ㄥ畾涔夌殑綾伙級涓笉鑳芥湁闈欐佹暟鎹垚鍛樸?/p>
13錛岄潤鎬佹垚鍏冨嚱鏁幫細 14錛屼負浠涔堥潤鎬佹垚鍏冨嚱鏁頒笉鑳借闂竴鑸殑鏁版嵁鎴愬憳錛屼篃涓嶈兘璋冪敤鏅氱殑鎴愬憳鍑芥暟? 涓涓粡榪囧睍寮鍚庣殑.cpp鏂囦歡灝辨槸涓涓紪璇戝崟鍏?/p>
涓涓獂x.h錛堢粡榪囬澶勭悊錛?+ 涓涓獂x.cpp = 涓涓紪璇戝崟鍏?br>涓涓紪璇戝崟鍏冿紙緇忚繃緙栬瘧錛? xx.obj 銆銆1.澹版槑 銆銆涓涓0鏄庡皢涓涓悕縐板紩鍏ヤ竴涓綔鐢ㄥ煙; 銆銆鍦╟++涓紝鍦ㄤ竴涓綔鐢ㄥ煙涓噸澶嶄竴涓0鏄庢槸鍚堟硶鐨? int foo(int,int); //鍑芥暟鍓嶇疆澹版槑 typedef int Int; //typedef 澹版槑 class bar; //綾誨墠緗0鏄? extern int g_var; //澶栭儴寮曠敤澹版槑 class bar; //綾誨墠緗0鏄? typedef int Int; //typedef 澹版槑 extern int g_var; //澶栭儴寮曠敤澹版槑 friend test; //鍙嬪憳澹版槑 using std::cout; //鍚嶅瓧絀洪棿寮曠敤澹版槑 friend test; //鍙嬪憳澹版槑 using std::cout; //鍚嶅瓧絀洪棿寮曠敤澹版槑 int foo(int,int); //鍑芥暟鍓嶇疆澹版槑 銆銆鍦ㄥ悓涓涓綔鐢ㄥ煙涓綘鍙互澶氭閲嶅榪欎簺澹版槑銆? 銆銆鏈変袱縐嶅0鏄庝笉鑳介噸澶嶏紝閭e氨鏄被鎴愬憳鍑芥暟鍙婇潤鎬佹暟鎹垚鍛樼殑澹版槑 class foo 2.瀹氫箟 銆銆涓涓畾涔夋彁渚涗竴涓疄浣?綾誨瀷銆佸疄渚嬨佸嚱鏁?鍦ㄤ竴涓綔鐢ㄥ煙鐨勫敮涓鎻忚堪銆?/p>
銆銆鍦ㄥ悓涓浣滅敤鍩熶腑涓嶅彲閲嶅瀹氫箟涓涓疄浣撱?/p>
銆銆浠ヤ笅閮芥槸瀹氫箟銆?/p>
int y; class foo ; struct bar ; foo* p; static int i; enum Color; const double PI = 3.1415; union Rep; void test(int p) {}; foo a; bar b; 銆銆3.緙栬瘧鍗曞厓 銆銆褰撲竴涓猚鎴朿pp鏂囦歡鍦ㄧ紪璇戞椂錛岄澶勭悊鍣ㄩ鍏堥掑綊鍖呭惈澶存枃浠訛紝褰㈡垚涓涓惈鏈夋墍鏈夊繀瑕佷俊鎭殑鍗曚釜婧愭枃浠?榪欎釜婧愭枃浠跺氨鏄竴涓紪璇戝崟鍏冦傝繖涓紪璇戝崟鍏冧細琚紪璇戞垚涓轟竴涓笌cpp鏂囦歡鍚嶅悓鍚嶇殑鐩爣鏂囦歡(.o鎴栨槸.obj)銆傝繛鎺ョ▼搴忔妸涓嶅悓緙栬瘧鍗曞厓涓駭鐢熺殑絎﹀彿鑱旂郴璧鋒潵錛屾瀯鎴愪竴涓彲鎵ц紼嬪簭銆?/p>
銆銆4.鑷敱鍑芥暟 銆銆濡傛灉涓涓嚱鏁版槸鑷敱鍑芥暟錛岄偅涔堣繖涓嚱鏁頒笉鏄被鐨勬垚鍛樺嚱鏁幫紝涔熶笉鏄弸鍏冨嚱鏁般?/p>
銆銆涓嬮潰鏉ョ湅鍐呴儴榪炴帴鍜屽閮ㄨ繛鎺?/p>
銆銆鍐呴儴榪炴帴錛氬鏋滀竴涓悕縐板浜庡畠鐨勭紪璇戝崟鍏冩潵璇存槸灞閮ㄧ殑錛屽茍涓斿湪榪炴帴鏃朵笉浼氫笌鍏跺畠緙栬瘧鍗曞厓涓殑鍚屾牱鐨勫悕縐扮浉鍐茬獊錛岄偅涔堣繖涓悕縐版湁鍐呴儴榪炴帴(娉細鏈夋椂涔熷皢澹版槑鐪嬩綔鏄棤榪炴帴鐨勶紝榪欓噷鎴戜滑緇熶竴鐪嬫垚鏄唴閮ㄨ繛鎺ョ殑)銆?/p>
銆銆浠ヤ笅鎯呭喌鏈夊唴閮ㄨ繛鎺? 銆銆a)鎵鏈夌殑澹版槑 銆銆b)鍚嶅瓧絀洪棿(鍖呮嫭鍏ㄥ眬鍚嶅瓧絀洪棿)涓殑闈欐佽嚜鐢卞嚱鏁般侀潤鎬佸弸鍏冨嚱鏁般侀潤鎬佸彉閲忕殑瀹氫箟 銆銆c)enum瀹氫箟 銆銆d)inline鍑芥暟瀹氫箟(鍖呮嫭鑷敱鍑芥暟鍜岄潪鑷敱鍑芥暟) 銆銆e)綾葷殑瀹氫箟 銆銆f)鍚嶅瓧絀洪棿涓璫onst甯擱噺瀹氫箟 銆銆g)union鐨勫畾涔?/p>
銆銆澶栭儴榪炴帴:鍦ㄤ竴涓鏂囦歡紼嬪簭涓紝濡傛灉涓涓悕縐板湪榪炴帴鏃跺彲浠ュ拰鍏跺畠緙栬瘧鍗曞厓浜や簰錛岄偅涔堣繖涓悕縐板氨鏈夊閮ㄨ繛鎺ャ?/p>
銆銆浠ヤ笅鎯呭喌鏈夊閮ㄨ繛鎺? 銆銆a)綾婚潪inline鍑芥暟鎬繪湁澶栭儴榪炴帴銆傚寘鎷被鎴愬憳鍑芥暟鍜岀被闈欐佹垚鍛樺嚱鏁?/p>
銆銆b)綾婚潤鎬佹垚鍛樺彉閲忔繪湁澶栭儴榪炴帴銆?/p>
銆銆c)鍚嶅瓧絀洪棿(鍖呮嫭鍏ㄥ眬鍚嶅瓧絀洪棿)涓潪闈欐佽嚜鐢卞嚱鏁般侀潪闈欐佸弸鍏冨嚱鏁板強闈為潤鎬佸彉閲?/p>
銆銆涓嬮潰涓句緥璇存槑錛?/p>
銆銆a)澹版槑銆乪num瀹氫箟銆乽nion瀹氫箟鏈夊唴閮ㄨ繛鎺?/p>
銆銆鎵鏈夌殑澹版槑銆乪num瀹氫箟鍙妘nion瀹氫箟鍦ㄧ紪璇戝悗涓嶄細浜х敓榪炴帴絎﹀彿錛屼篃灝辨槸鍦ㄤ笉鍚岀紪璇戝崟鍏冧腑鏈夌浉鍚屽悕縐扮殑澹版槑鍙奺num銆乽nion瀹氫箟騫朵笉浼氬湪榪炴帴鏃跺彂鐢熷彂鐜板涓鍙風殑閿欒銆?/p>
// main.cpp typedef int Int; //typedef 澹版槑錛屽唴閮ㄨ繛鎺?/p>
enum Color; //enum瀹氫箟,鍐呴儴榪炴帴 union X //union瀹氫箟錛屽唴閮ㄨ繛鎺?br>{ int main(void) // a.cpp typedef int Int; //鍦╝.cpp涓噸澹版槑涓涓猧nt綾誨瀷鍒悕錛屽湪榪炴帴鏃朵笉浼氬彂鐢熼敊璇?br>enum Color; //鍦╝.cpp涓噸瀹氫箟浜嗕竴涓猠num Color錛屽湪榪炴帴鏃朵笉浼氬彂鐢熼敊璇?br>const Int i =blue; //const甯擱噺瀹氫箟錛屽唴閮ㄨ繛鎺?br>union X //union瀹氫箟錛屽唴閮ㄨ繛鎺?br>{ 銆銆b)鍚嶅瓧絀洪棿涓潤鎬佽嚜鐢卞嚱鏁般侀潤鎬佸弸鍏冨嚱鏁般侀潤鎬佸彉閲忋乧onst甯擱噺瀹氫箟鏈夊唴閮ㄨ繛鎺?/p>
// main.cpp namespace test static int i = 0; //鍏ㄥ眬闈欐佸彉閲忓畾涔夛紝鍐呴儴榪炴帴 //a.cpp namespace test int i = 0; //鍏ㄥ眬鍙橀噺瀹氫箟錛屽閮ㄨ繛鎺?br>int k = 0; //鍏ㄥ眬鍙橀噺瀹氫箟錛屽閮ㄨ繛鎺?br>int foo() { return 2;} //鍏ㄥ眬鍑芥暟瀹氫箟錛屽閮ㄨ繛鎺? 銆銆鍦ㄥ叏灞鍚嶅瓧絀洪棿涓紝main.cpp涓畾涔変簡闈欐佸彉閲廼,甯擱噺k,鍙婇潤鎬佽嚜鐢卞嚱鏁癴oo絳夛紝榪欎簺閮芥湁鍐呴儴榪炴帴銆傚鏋滀綘灝嗚繖浜涘彉閲忔垨鍑芥暟鐨剆tatic鎴栨槸const淇グ絎﹀幓鎺夛紝鍦ㄨ繛鎺ユ椂灝變細鐜癿ultiply defined symbols閿欒錛屽畠浠笌a.cpp涓殑鍏ㄥ眬鍙橀噺銆佸叏灞鍑芥暟鍙戠敓鍐茬獊銆?/p>
c)綾誨畾涔夋繪湁鍐呴儴榪炴帴,鑰岄潪inline綾繪垚鍛樺嚱鏁板畾涔夋繪湁澶栭儴榪炴帴錛屼笉璁鴻繖涓垚鍛樺嚱鏁版槸闈欐併佽櫄鎷熻繕鏄竴鑸垚鍛樺嚱鏁幫紝綾婚潤鎬佹暟鎹垚鍛樺畾涔夋繪湁澶栭儴榪炴帴銆? 銆銆1.綾葷殑瀹氫箟鏈夊唴閮ㄨ繛鎺ャ傚鏋滀笉鏄紝鎯寵薄涓涓嬩綘鍦?涓猚pp鏂囦歡涓璱nclude瀹氫箟浜嗙被Base鐨勫ご鏂囦歡錛屽湪4涓紪璇戝崟鍏冧腑鐨勭被Base閮芥湁澶栭儴榪炴帴錛屽湪榪炴帴鐨勬椂鍊欏氨浼氬嚭閿欍?/p>
銆銆鐪嬩笅闈㈢殑渚嬪瓙: //main.cpp class B //綾誨畾涔夛紝鍐呴儴榪炴帴 int B::s_i = 0; //綾婚潤鎬佹暟鎹垚鍛樺畾涔夛紝澶栭儴榪炴帴 int main() //main鍑芥暟錛屽叏灞鑷敱鍑芥暟錛屽閮ㄨ繛鎺?br>{ //a.cpp class B struct D 銆銆鍦ㄨ繖涓緥瀛愪腑錛宮ain.cpp涓巃.cpp涓兘鏈塩lass B鍜宑lass D鐨勫畾涔夛紝浣嗗湪緙栬瘧榪欎袱涓猚pp鏂囦歡鏃跺茍涓嶅彂鐢焞ink閿欒銆?/p>
銆銆2.綾葷殑闈瀒nline鎴愬憳鍑芥暟(涓鑸紝闈欐侊紝铏氭嫙閮芥槸)鎬繪湁澶栭儴榪炴帴錛岃繖鏍峰綋浣爄nclude浜嗘煇涓被鐨勫ご鏂囦歡錛屼嬌鐢ㄨ繖涓被鐨勫嚱鏁版椂錛屽氨鑳借繛鎺ュ埌姝g‘鐨勭被鎴愬憳鍑芥暟涓婏紝緇х畫浠ヤ笂闈負渚嬪瓙錛屽鏋滄妸a.cpp涓殑struct D鏀逛負 struct D //綾誨畾涔?br>{ 銆銆榪欐椂main.cpp涓巃.cpp涓殑D::foo閮芥湁澶栭儴榪炴帴錛屽湪榪炴帴灝變細鍑虹幇multiply defined symbols閿欍? 銆銆3.綾葷殑闈欐佹暟鎹垚鍛樻湁澶栭儴榪炴帴錛屽涓婁緥鐨凚::s_i,榪欐牱褰撲綘鍦╩ain.cpp涓畾涔変簡綾婚潤鎬佹暟鎹垚鍛橈紝鍏跺畠緙栬瘧鍗曞厓鑻ヤ嬌鐢ㄤ簡B::s_i,灝變細榪炴帴鍒癿ain.cpp瀵瑰簲緙栬瘧鍗曞厓鐨剆_i銆?/p>
銆銆d)inline鍑芥暟鎬繪湁鍐呴儴榪炴帴錛屼笉璁鴻繖涓嚱鏁版槸浠涔堝嚱鏁?/p>
// main.cpp inline int foo() { return 1;} //inline鍏ㄥ眬鍑芥暟錛屽唴閮ㄨ繛鎺?br>class Bar //綾誨畾涔夛紝鍐呴儴榪炴帴 class Base inline int Base::k(){return 5;} //inline 綾繪垚鍛樺嚱鏁幫紝鍐呴儴榪炴帴 銆銆濡傛灉浣犵殑Base綾繪槸瀹氫箟鍦˙ase.h涓紝鑰孊ase鐨刬nline 鍑芥暟鏄湪Base.cpp涓畾涔夌殑錛岄偅涔堝湪main.cpp涓璱nclude "Base.h"緙栬瘧涓嶄細鍑虹幇闂錛屼絾鍦ㄨ繛鎺ユ椂浼氭壘涓嶅埌鍑芥暟k錛屾墍浠ョ被鐨刬nline鍑芥暟鏈濂芥斁鍒板ご鏂囦歡涓紝璁╂瘡涓涓寘鍚ご鏂囦歡鐨刢pp閮借兘鎵懼埌 inline鍑芥暟銆?/p>
銆銆鐜板湪瀵筩++涓殑榪炴帴鏈変簡涓涓璇嗭紝鑳芥竻妤氱殑鐭ラ亾鏄粈涔堝師鍥犱駭鐢熻繛鎺ユ椂閿欒銆傚綋浣犲湪榪炴帴鏃朵駭鐢熻繛鎺ヤ笉鍒扮殑閿欒錛岃繖璇存槑鎵鏈夌殑緙栬瘧鍗曞厓閮芥病鏈夎繖涓疄浣撶殑澶栭儴榪炴帴錛涘綋浣犲湪榪炴帴鏃跺彂鐜版湁澶氫釜榪炴帴瀹炰綋錛岃繖璇存槑鏈夊涓紪璇戝崟鍏冩彁渚涗簡鍚屽悕鐨勬湁澶栭儴榪炴帴鐨勫疄浣撱傚悓鏃訛紝鍦ㄨ繘琛岀▼搴忚璁℃椂錛屼篃瑕佹敞鎰忎笉瑕佷嬌鍙湁鏈紪璇戝崟鍏冪敤鍒扮殑鍑芥暟銆佺被銆佸彉閲忕瓑鏈夊閮ㄨ繛鎺ワ紝鍑忓皯涓庡叾瀹冪紪璇戝崟鍏冪殑榪炴帴鍐茬獊銆?/p>
銆銆涓嶈繃鍦ㄨ繖閲屾病鏈夎鏄巘emplate鍑芥暟鍙妕emplate class鐨勮繛鎺ユэ紝騫朵笖瀵逛竴浜涚壒鍒殑鎯呭喌涔熸病鏈変綔鍑鴻鏄?姣斿inline鍑芥暟涓嶈兘琚玦nline)銆?br> '.h'鎴?.hpp'閲岀殑浠g爜浼氳#include瀹忔坊鍔犲埌'.c'鎴?.cpp'鏂囦歡涓?br>榪欎釜榪囩▼鍙戠敓鍦ㄩ緙栬瘧鏈燂紝棰勭紪璇戝櫒錛堢幇鍦ㄥソ鍍忔病鏈夎繖涓笢瑗夸簡錛岄兘 涓涓?.c'鎴?.cpp'鏄竴涓紪璇戝崟鍏冦傜紪璇戝櫒灝嗗叾緲昏瘧鎴愪簩榪涘埗浠g爜銆?/p>
An non-nullary metafunction is invoked by instantiating the class template with particular template parameters (metafunction arguments); All metafunction's arguments must be types (i.e. only type template parameters are allowed). A metafunction can have a variable number of parameters. A nullary metafunction is represented as a (template) class with a nested type typename member. 鍘熸搷浣滅殑涓夌琛ㄨ揪寮忥紙f鏄竴涓師鎿嶄綔錛?br>1 f::type A Lambda Expression is a compile-time invocable entity in either of the following two forms: Metafunction Class Placeholder Expression Most of the MPL components accept either of those, and the concept gives us a consice way to describe these requirements.
甯哥敤鐨勭被
boost::regex 姝e垯琛ㄨ揪寮?br>
boost::cmatch 浠har鏁扮粍涓哄鍣紝瀛樺偍鍖歸厤榪斿洖鍊箋?br>boost::smatch 浠td::string涓哄鍣紝瀛樺偍鍖歸厤榪斿洖鍊箋?br>
boost::regex_match 鍖歸厤綆楁硶
boost::regex_search 鏌ユ壘綆楁硶
boost::regex_replace 鏇挎崲綆楁硶
綆鍗曚緥瀛?br>
#include <iostream>
#include <boost/regex.hpp>
int main( int argc, char* argv[] )
{
char *buf = "This is boost::regex example";
boost::regex exampleregex( "boost::regex" );
boost::cmatch result;
if( boost::regex_search( buf, result, exampleregex ) )
{
std::cout << result.str() << std::endl;
}
return 0;
}
娉ㄦ剰regex.hpp鐨勫寘鍚傝鍦ㄥ紑鍙戝伐鍏蜂腑璁劇疆boost澶存枃浠舵墍鍦ㄤ綅瀛愩?br>
]]>
浜嗚嚜宸辮璁$殑Oid銆傝繖鏄負浣曞憿錛熸湰浜鴻涓猴紝UUID铏藉彲浠ュ敮涓琛ㄧず瀵硅薄鍙婂叾瀹炰緥錛屼絾鏄疷UID涔嬮棿娌℃湁浠涔?br>鍏崇郴錛屼笉鑳藉艦鎴愪竴縐嶇粨鏋勬潵琛ㄧず瀵硅薄涔嬮棿鐨勫叧緋匯傝孫id鐨勬樉鐜板嵈鑳芥弧瓚充互涓婁袱鐐癸紝鍞竴琛ㄧず瀵硅薄鍜屾樉紺?br>瀵硅薄涔嬮棿鐨勭粨鏋勶紝鐢氳嚦鏄璞$殑瀹炰緥鐨勫敮涓鏍囪瘑鍜屽疄渚嬩箣闂寸殑鍏崇郴銆?br> 榪欎篃緇欐垜浠竴涓惎紺猴紝鍒嗗竷寮忕郴緇熶腑瀵硅薄鐨勬爣璇嗛櫎浜嗗叿鏈夊敮涓鎬у錛岃鏈変竴瀹氭樉紺哄璞′箣闂村叧緋葷殑鑳?br>鍔涳紝浼氭洿濂姐?br>
]]>
]]>
榪斿洖鍊肩被鍨?鍑芥暟鍚? 鍙傛暟鍒楄〃 );
鍦˙oost.Function涓紝鎴戜滑鍙互鏂逛究鐨勫畾涔夊畾涔夊嚱鏁板璞°備笉榪囧湪瀹氫箟鐢ㄦ潵琛ㄧず綾繪垚鍛樺嚱鏁扮殑鍑芥暟瀵硅薄鏃?br>絎竴涓弬鏁版槸綾繪寚閽堛傝屼笖鍦ㄨ皟鐢ㄦ椂錛岃浼犲叆涓涓被瀹炰緥鐨勬寚閽堛傝繖鏍風敤璧鋒潵騫朵笉鏄緢鏂逛究錛屽洜涓鴻皟鐢ㄨ?br>瑕佺煡閬撶被瀹炰緥銆傝繖瀹為檯涓婃病鏈夊疄鐜拌В鑰︺傝岃В鑰︽槸鎴戜滑浣跨敤鍥炶皟鎴栧鎵樿璁$殑涓涓洰鏍囥?br>
涓轟簡瑙e喅榪欎釜闂錛屾垜浠浣跨敤Boost.Bind搴?br>
Boost.Bind鏄竴涓嚱鏁板璞″伐鍘傘備粬鐢ㄦ潵浜х敓鎴戜滑闇瑕佺殑鍑芥暟瀵硅薄銆傚ソ浜嗭紝鏈変簡瀹冿紝浣犲彲浠ュ湪浣犺璁′腑澶?br>閲忎嬌鐢˙oost.Function銆備笉鐢ㄥ啀鍘誨畾涔夌被鎴愬憳鍑芥暟褰㈠紡鐨勫嚱鏁板璞″暒錛屽彧鐢ㄥ畾涔夋櫘閫氬嚱鏁板璞°?br>
涓涓畝鍗曠殑渚嬪瓙
class CExample
{
public:
bool printstr( const std::string &str )
{
std::cout << "CExample::printstr" << str << std::endl;
return true;
}
};
//瀹氫箟涓涓嚱鏁板璞?br>boost::function< bool ( const std::string& ) > printstr;
//鐢˙oost.Bind鍒涘緩涓涓嚱鏁板璞★紝璧嬬粰printstr
CExample example;
printstr = boost::bind( &CExample::printstr, &example, _1 );
濂戒簡錛屾垜浠垱寤轟簡涓涓嚱鏁板璞★紝鑰屼笖璋冪敤鏃朵笉鍐嶉渶瑕佺被瀹炰緥鎷夈傜敤Boost.Function鍜孊oost.Bind澶уぇ
鐨勭畝鍖栦簡Command妯″紡鐨勫疄鐜般?br>
鍦ㄤ笂闈㈢殑渚嬪瓙涓涓彜鎬殑瀵硅薄"_1"銆傝繖涓彨鍋氱珯浣嶇錛屼粬浠h〃榪欎釜浣嶇疆鏈変釜鍙傛暟錛屼絾鐜板湪榪樹笉鐭ラ亾鍙?br>鏁版槸浠涔堛俖1浠h〃鍙傛暟鍒楄〃涓殑絎竴涓綅緗笂鐨勫弬鏁般侭oost.Bind涓鍏卞畾涔変簡9涓珯浣嶇瀵硅薄銆傚涓?br>_1,_2,_3,_4,_5,_6,_7,_8,_9銆傚垎鍒唬琛ㄥ弬鏁板垪琛ㄤ腑浣嶅瓙銆?br>
Boost.Bind浜х敓鐨勫嚱鏁板璞″彲浠ョ洿鎺ヤ嬌鐢紝鍒╃敤涓婇潰鐨勪緥瀛愩?br>
bool b = boost::bind( &CExample::printstr, &example, _1 )( "Hello World" );
]]>
鍑芥暟鎸囬拡瀵硅璁″緢鏈夌敤銆傚畠浣胯皟鐢ㄨ呭彲浠ュ歡鏈熻皟鐢紝璋冪敤鏃舵満鐢辮皟鐢ㄨ呯‘瀹氥傝屼笖鍙互鏀瑰彉
鍝嶅簲鑰咃紝浠ュ簲瀵逛笉鍚岀殑瑕佹眰銆?br>
C涓殑鍑芥暟鎸囬拡鍙兘鐢ㄤ簬鑷敱鍑芥暟銆傚湪C++涓櫎浜嗚嚜鐢卞嚱鏁拌繕鏈夊嚱鏁板璞″拰綾繪垚鍛樺嚱鏁幫紝榪欎簺
C鐨勫嚱鏁版寚閽堟槸鏃犳硶鐢ㄧ殑銆傝繖瑕佹眰鑳介傚簲C++璇█鐨勫嚱鏁版寚閽堛傛棦鐒禖++璇█鏈韓娌℃湁鎻愪緵錛?br>閭e氨鎻愪緵涓涓簱銆俿tl鎻愪緵浜嗭紝浣嗘槸瀹氫箟浜嗗緢澶氱被鍨嬶紝浣跨敤璧鋒潵騫朵笉鏄緢鏂逛究錛岃屼笖鍑芥暟鍙傛暟
鐨勪釜鏁拌闄愬畾鍦ㄤ袱涓互涓嬶紝鏇磋兘鏄鍙楅檺鍒躲侭oost.Function搴撴彁渚涗簡涓涓ソ鐨勮В鍐蟲柟妗堛?br>
Boost.Function搴撳彲浠ユ敮鎸佽嚜鐢卞嚱鏁幫紝鍑芥暟瀵硅薄錛岀被鎴愬憳鍑芥暟銆傝屼笖鍙傛暟涓暟澶氳揪10涓?br>Boost.Function搴撳埄鐢ㄦā鏉挎妧鏈潵瀹炵幇銆傜敓鎴愮殑浠g爜鏈夊緢楂樼殑榪愯鏁堢巼銆傛湰搴撳彲浠ヤ笉鐢ㄧ紪璇?br>鐩存帴浣跨敤銆?br>
Boost.Function鐨勫ご鏂囦歡銆?br>function.hpp
瀹氫箟涓涓狟oost.Function鐨勫璞★紙鏄竴涓繑鍥炲肩被鍨嬩負int錛岀涓涓弬鏁版槸std::string綾誨瀷
絎簩涓弬鏁版槸float綾繪柊錛?br>
boost::function< int ( std::string, float ) > funptr;
涓婇潰榪欎釜瀹氫箟鏂瑰紡鏄竴縐嶅鏄撶悊瑙g殑瀹氫箟鏂瑰紡銆備絾鏈変簺緙栬瘧鍣ㄤ笉鏀寔錛屽鏋滄兂鏇村鐨勭紪璇戝櫒
鏀寔錛屽垯鐢ㄤ笅闈㈣繖縐嶅畾涔夋柟寮?br>
boost::function2< int, std::string, float > funptr;
娉ㄦ剰妯℃澘涓湁3涓被鍨嬶紝鑰宖unction綾誨嵈鏄痓oost::function2銆傚簲涓鴻繑鍥炲肩被鍨嬩笉璁$畻鍦ㄥ弬鏁?br>綾誨瀷涓紙鍘熷洜寰堢畝鍗曪紝C++鐨勭紪璇戝櫒涓嶄細鏍規(guī)嵁榪斿洖綾誨瀷涓嶅悓鏉ュ尯鍒嗗嚱鏁板畾涔夌殑涓嶅悓錛夈?br>
int freefun( std::string str, float f )
{
std::cout << str << " : " << f << std::endl;
return 0;
}
class CFun
{
public:
int operator() ( std::string str, float f )
{
std::cout << str << " : " << f << std::endl;
return 0;
}
}
涓婇潰瀹氫箟浜嗕竴涓嚜鐢卞嚱鏁板拰涓涓嚱鏁板璞°備笅闈㈠皢鎶婁粬浠粯緇檉unction瀵硅薄銆?br>
璧嬪間負鑷敱鍑芥暟
funptr = &freefun;
璧嬪間負鍑芥暟瀵硅薄
CFun fun;
funptr = fun;
浠ヤ笂涓ょ鎯呭喌鐨勮皟鐢ㄦ柟娉曚竴鑷達紝濡備笅
funptr( "float =", 10.0 );
Boost.Function瀵硅薄瑕佽兘鎸囧悜綾誨瀷鍘熷嚱鏁幫紝鍏跺畾涔夎濡備笅
class FreeClass
{
public:
int out( std::string str, float f )
{
std::cout << str << " : " << f << std::endl;
return 0;
}
};
boost::function< int ( FreeClass*, std::string, float ) > funptr;
璺ㄥ鉤鍙扮殑瀹氫箟鏂規(guī)硶
boost::function3< int, FreeClass*, std::string, float > funptr;
璧嬪兼柟娉?br>funptr = &FreeClass::out;
璋冪敤鏂規(guī)硶
FreeClass fc;
funptr( &fc, "float =", 10.0 );
]]>
杞歡鍒嗘瀽鐨勫紑绔竴鑸槸闇姹傚垎鏋愩備絾鏄湪瀹炶返涓紝鍙戠幇浜嗗緢澶氱殑闂銆?br>1 鐢ㄦ埛鐨勯渶姹傚茍涓嶆槸鏈夌敤鎴鋒彁鍑恒傚湪鍜岀敤鎴鋒垨杞歡鐨勯闄╂壙鎷呰呬氦璋堝悗錛屼細甯稿彂鐜幫紝浠栦滑瀵硅嚜宸辨兂瑕佺殑
杞歡騫朵笉鏄緢娓呮錛屼細鎻愬嚭涓浜涚緇熺殑瑕佹眰銆傚湪寮鍙戝嚭涓涓師鍨嬪悗錛屼粬浠細淇鎴栨洿鏀癸紝鐢氳嚦鎺ㄧ炕浠栦滑
鐨勯渶姹傘備綘浼氬彂鐜版槸浣犲湪涓嶆柇鐨勬彁鍑恒佸畬鍠勯渶姹傦紝鐢ㄦ埛鎴栭闄╂壙鎷呰呭彧鏄湪瑁佸喅浣犵殑闇姹傘傝岃繖鏍蜂笅鍘?br>浣犵殑杞歡瑕佷笉鏂殑鏀癸紝濂藉儚閬ラ仴鏃犳湡銆?br>2 闇姹傚鏄竴縐嶅姛鑳界殑闆嗗悎銆傝蔣浠跺嚭鏉ュ悗錛屽鏋滄湁浜嗘敼鍔紝鎴栧湪鏂扮殑欏圭洰涓幓澶嶇敤浠ュ墠鐨勮蔣浠朵細鍙戠幇寰?br>闅俱傚姣忎釜闇姹傦紝浣犱笉寰椾笉浠庡ご寮濮嬨?br>
棰嗗煙鍒嗘瀽鍜岄渶姹傚垎鏋愪笉鍚岋紝瀹冧笉鏄潰鍚戝姛鑳界殑銆傝屾槸闈㈠悜闂鐨勩傝繖鏈変簺鍍忚冭瘯涓В棰樸傞拡瀵圭壒瀹氱殑闂?br>棰橈紝鏉ユ彁渚涜В鍐蟲柟妗堬紝騫跺湪榪欎釜鏂規(guī)鐨勭洿鎺ユ寚瀵間笅瑙e嚭棰樼洰銆傝繖涓洿鎺ユ寚瀵煎緢鏈夋剰涔夛紝搴斾負鐩存帴鎸囧琛?br>紺鴻В棰樼殑鏂規(guī)灝嗚搴旂敤鍒拌В棰樼殑榪囩▼涓紙鍗蟲槸鍙疄鐜扮殑錛夈?br>
棰嗗煙鍒嗘瀽涓嶆槸瀵硅鏋勯犵殑杞歡榪涜鍏ㄩ潰鐨勫垎鏋愩傝屾槸瀵硅蔣浠舵秹鍙婂埌鐨勭壒瀹氱殑棰嗗煙榪涜鍒嗘瀽錛堝鍐欏濯掍綋
杞歡錛屼綘瑕佸闊寵棰戦鍩熻繘琛屽垎鏋愶級銆傝岄鍩熸槸涓庣壒瀹氱殑鐭ヨ瘑鐩稿叧鑱旂殑錛堝闊寵棰戦鍩熶腑鍏充簬闊抽銆佽
棰戠紪瑙g爜鐭ヨ瘑錛岄鍩熷垎鏋愯鎼炴竻妤氳繖涓鍩熶腑鐨勭煡璇嗭紝鎵懼嚭鍚勭煡璇嗙偣涓殑鍏崇郴錛屽茍瀵瑰畠浠繘琛屾娊璞★紝褰?br>鎴愭ā鍨嬨傞鍩熷垎鏋愬己璋冪殑鏄棶棰樺煙銆傝繖灝辨槸璇村畠闈㈠鐨勬槸涓涓浉瀵圭‘瀹氱殑鑼冨洿銆傝蔣浠惰瑙e喅鐨勬槸涓涓浉
瀵圭‘瀹氱殑鑼冨洿銆備篃鏈夊埄浜庢祴璇曡蔣浠躲?br>
棰嗗煙鍒嗘瀽涓嶈兘浠f浛闇姹傚垎鏋愶紝浣嗘槸鍙互鑴辯闇姹傛潵瀵圭壒瀹氱殑棰嗗煙榪涜鍒嗘瀽銆傞鍩熷垎鏋愬悗浜х敓鐨勮璁¤鐩?br>鎺ユ寚瀵煎疄鐜幫紝鍙互鏄犲皠鍒拌蔣浠朵腑銆傜敱浜庨鍩熷垎鏋愭槸闈㈠闂鐨勶紝瀹冧駭鐢熺殑杞歡涓嶄竴瀹氳兘婊¤凍闇姹傦紝鍙兘
鏍規(guī)湰灝卞搴斾笉涓婇渶姹傘備絾鏄畠鏄壒瀹氶棶棰樼殑瑙e喅鏂規(guī)錛屽彲浠ヤ綔涓轟竴涓満鍒舵潵鏀寔闇姹傜殑瀹炵幇銆傝屼笖鐗瑰畾
鐨勯棶棰樻垨鐫璇磋繖縐嶅弽搴旀煇涓鍩熶腑鐨勭煡璇嗗叧緋葷殑杞歡鍏跺搴旂殑鏄竴縐嶇ǔ瀹氱殑闇姹傦紝姣旇緝瀹規(guī)槗澶嶇敤銆佹祴璇?br>鍜屽彂灞曘?br>
闈㈠闇姹傚垎鏋愬緱鍒版槸涓縐嶅簲鐢ㄧ殑瑕佹眰銆傝屾牴鎹蔣浠舵秹鍙婄殑棰嗗煙榪涜鍒嗘瀽錛屽緱鍒扮殑鏄畠鐨勫熀鏈満鍒躲傚簲鐢?br>鏄鏍風殑錛岃屾満鍒跺叾瀹炲氨鍙湁閭d箞鍑犱釜銆傛牴鎹簲鐢ㄧ殑瑕佹眰鏉ョ粍鍚堣繖浜涙満鍒躲傝繖鏍烽渶姹傜殑鍙樺寲錛屽茍涓嶄細鍘?br>榪囧鐨勫啿鍑諱綘閫氳繃棰嗗煙鍒嗘瀽寰楀埌鐨勬ā鍨嬪拰瀹炵幇銆備綘瑕佸仛鐨勬槸瀵逛粬浠繘琛岀粍鍚堛?img src ="http://m.shnenglu.com/walkspeed/aggbug/27869.html" width = "1" height = "1" />
]]>
涓涓ā鍨嬩笂鐨勬瀯鎯沖拰鎻忚堪銆傚湪瀹為檯鐨勬搷浣滅郴緇熺殑瀹炵幇涓婂茍涓嶈兘鍋氬埌榪欎竴鐐廣?br>鍥犱負錛岃瀹炵幇鍦ㄨ繘紼嬮鍑烘椂閿姣佸畠鎵浣跨敤鐨勫唴瀛樼┖闂達紝灝辮緇欐瘡涓浣跨敤鐨?br>鍐呭瓨絀洪棿鎵撲竴涓爣錛岃〃紺鴻繖孌靛唴瀛樼┖闂磋閭d釜榪涚▼浣跨敤銆傚湪榪欑鎯呭喌涓嬶紝濡?br>鏋滄湁澶氫釜浣跨敤灝忓唴瀛橀噺鐨勮繘紼嬶紝騫朵笖琚綣佺殑鍒涘緩鍜岄攢姣侊紝閭d箞鍏夎浣忛偅浜?br>榪涚▼鏍囪嚧灝辮鍗犵敤寰堝ぇ鐨勫唴瀛樼┖闂達紝榪欐槸涓涓緢涓嶅垝綆楃殑鏂規(guī)銆傛墍浠ュ湪瀹為檯
涓紝鎿嶄綔緋葷粺騫舵病鏈夌粰姣忎釜榪涚▼浣跨敤鐨勫唴瀛樼┖闂存墦鏍囥傝繖鏍鳳紝鏈変簺灝忓唴瀛樻槸
娌℃湁琚洖鏀剁殑錛屽鏋滃嬈″紑鍏寵繖涓▼搴忓氨浼氬彂鐜幫紝鏈夊唴瀛樿澶ч噺鐨勫崰鐢紝鑰?br>涓嶈兘琚噴鏀俱?br> 鎵浠ラ偅浜涘湪紼嬪簭涓彧鏈変竴涓疄渚嬶紝騫朵笖鏄new鍑烘潵鐨勫璞★紝涔熷簲璇ヤ富鍔?br>鐨勫幓鎵嬪姩閿姣侊紝鑰屼笉鑳戒緷璧栫▼搴忛鍑烘椂鐢辯郴緇熼攢姣併?br>
琚玭ew鍑烘潵鐨勫璞″叾閿姣佹槸涓や釜姝ラ銆?br> 1 鏋愭瀯瀵硅薄銆傛潯鐢ㄥ璞$殑鏋愭瀯鍑芥暟錛屽皢瀵硅薄鍗犵敤鐨勮祫婧愰噴鏀炬帀銆?br> 2 閲婃斁鍐呭瓨銆傚皢瀵硅薄鎵鍗犵敤鐨勫唴瀛橀噴鏀炬帀銆?br>
濡傛灉new鍑烘潵鐨勫璞℃病鏈夎閿姣侊紝浼氶犳垚榪炰釜灞傞潰涓婄殑娉勯湶銆?br> 1 瀵硅薄娉勯湶銆備粬浼氶犳垚鑳屽璞″崰鐢ㄧ殑璧勬簮涔熸病鏈夐攢姣佹垨閲婃斁銆傛瘮濡傚湪瀵硅薄
涓崰鏈夋枃浠剁殑鍙ユ焺錛屽湪鏋愭瀯鏃舵墠閲婃斁銆傚鏋滃璞℃硠闇蹭簡錛岃繖涓彞鏌勬槸涓嶄細琚噴
鏀劇殑銆傞偅涓枃浠朵細涓鐩磋鍗犵敤銆傚鏋滄枃浠舵墦寮鏃舵槸鐙崰鐨勶紝閭d箞鍙婃椂瀵硅薄鎵鍦?br>鐨勭▼搴忛鍑轟簡錛屽埆鐨勭▼搴忎篃鍒兂璁塊棶榪欎釜鏂囦歡銆?br> 2 鍐呭瓨娉勯湶銆傛墍鍗犵敤鐨勫唴瀛樹笉鑳借閲婃斁銆?
]]>
Queue妯″紡璇繪暟鎹殑涓涓畝鍗曠殑紺轟緥
鍦≦ueue妯″紡涓嬭鏁版嵁錛岃褰曪紙Dbt錛夎璋冪敤set_ulen鍑芥暟鍜宻et_flags鍑芥暟
#include < time.h >
#include < iostream >
#include < bdb/db_cxx.h >
struct ValueType
{
int _int;
char _char;
char _array[256];
};
void readDB( void )
{
Db bdb( 0, 0 );
bdb.set_re_len( sizeof( ValueType ) ); //鐢≦ueue妯″紡涓瀹氳璋冪敤錛岃屼笖涓瀹氳鍦╫pen鍓嶈皟鐢?br> bdb.set_re_pad( 0x00 ); //涓轟簡瀛楃涓茬殑濉厖涓?銆?br>
bdb.open( 0, "SaveRecodeDB.db", 0, DB_QUEUE, DB_CREATE, 0 );
size_t k;
ValueType v;
Dbt key( &k, sizeof( size_t ) );
key.set_ulen( sizeof( size_t ) );
Dbt value( &v, sizeof( ValueType ) );
value.set_ulen( sizeof( ValueType ) );
value.set_flags( DB_DBT_USERMEM );
//鐩存帴鐢ㄦ暟鎹簱鐨勮鍑芥暟
for( int i=0; i<1000000; ++i )
{
bdb.get( 0, &key, &value, DB_CONSUME );
}
bdb.close( 0 );
}
int main( int argc, char* argv[] )
{
clock_t et1 = clock();
readDB();
clock_t et2 = clock();
std::cout << "work is fine, " << "have times : " << et2 - et1 << std::endl;
return 0;
}
]]>
Queue妯″紡涓嬩粎鑳藉瓨鍌ㄥ畾闀跨殑璁板綍錛屾棦value鐨勯暱搴︿負瀹氶暱銆俀ueue鐨刱ey鏄竴涓昏緫澧為暱鐨勬暟錛屼竴鑸氨鏄痠nt銆?br>涓嶉渶瑕佸紑鍙戣呭幓鏀瑰彉榪欎釜綾誨瀷銆?br>
Queue妯″紡涓嬪彧鑳藉瓨鍌ㄥ畾闀跨殑璁板綍銆傛墍浠ヤ竴瀹氳璋冪敤DB鐨剆et_re_length鍑芥暟鏉ヨ瀹氭暟鎹簱涓褰曠殑闀垮害銆?br>濡傛灉娌℃湁璁懼畾錛岄粯璁ょ殑涓?銆傝繖鏍峰綋瀛樺偍璁板綍鏃朵竴瀹氫細鎶ュ紓甯搞傜▼搴忓嚭閿欍?br>鍦ㄨ鍙栬褰曟椂錛屽綋璁板綍鐨勯暱搴﹀皬浜庤瀹氱殑闀垮害鏃訛紝浼氬~鍏呭瓧絎﹁揪鍒拌瀹氶暱搴︺?br>榛樿鐨勫瓧絎︿負0x02錛圓SCII涓殑錛夈傚彲浠ヨ瀹氳嚜宸辯殑濉厖瀛楃銆傝皟鐢―B鐨剆et_re_pad銆?br>
涓涓畝鍗曠殑紺轟緥
#include < time.h >
#include < iostream >
#include < bdb/db_cxx.h >
struct ValueType
{
int _int;
char _char;
char _array[256];
};
void writeDB( void )
{
Db bdb( 0, 0 );
bdb.set_re_len( sizeof( ValueType ) ); //鐢≦ueue妯″紡涓瀹氳璋冪敤錛岃屼笖涓瀹氳鍦╫pen鍓嶈皟鐢?br> bdb.set_re_pad( 0x00 ); //涓轟簡瀛楃涓茬殑濉厖涓?銆?br>
bdb.open( 0, "SaveRecodeDB.db", 0, DB_QUEUE, DB_CREATE, 0 );
size_t k;
ValueType v;
Dbt key( &k, sizeof( size_t ) );
Dbt value( &v, sizeof( ValueType ) );
//鐩存帴鐢ㄦ暟鎹簱鐨勫啓鍑芥暟
for( int i=0; i<1000000; ++i )
{
bdb.put( 0, &key, &value, DB_APPEND );
}
bdb.close( 0 );
}
int main( int argc, char* argv[] )
{
clock_t et1 = clock();
writeDB();
clock_t et2 = clock();
std::cout << "work is fine, " << "have times : " << et2 - et1 << std::endl;
return 0;
}
鍦≦ueue妯″紡涓嬩笉鑳界敤娓告爣榪涜鏁版嵁鐨勬彃鍏ャ傚彧鑳借繘琛屾暟鎹殑淇敼銆?br>
]]>
瑕佽Berkeley DB鏁版嵁鏀寔騫跺彂錛屽氨瑕佸垱寤築erkeley DB鐨勭幆澧冿紙environment錛?br>鐜綾繪槸 DbEnv銆傝鏀寔騫跺彂錛屽湪鍒濆鍖朌bEnv鏃惰鐢―B_INIT_CDB銆丏B_INIT_MPOOL
涓や釜鏍囪嚧銆?br>
濡備笅
DbEnv env錛?br>env.open( "evn", DB_INIT_CDB|DB_INIT_MPOOL, 0 );
鐒跺悗鍦ㄥ垱寤烘暟鎹簱鏃訛紝灝嗙幆澧冧紶緇欐暟鎹簱銆傚涓?br>
Db bdb( &env, 0 );
榪欐牱灝卞彲浠ユ敮鎸佸茍鍙戜簡銆?br>
Berkeley DB騫跺彂鐨勭畝鍗曞師鍒?br>Berkeley DB鐨勫茍鍙戦伒寰殑鏄厑璁稿悓鏃跺涓鎿嶄綔錛屽綋鍙湁涓涓啓鎿嶄綔銆?br>1 姣忎釜娓告爣鏈変竴閿侊紝闈炴父鏍囩殑璇誨啓鐢ㄤ竴閿?br>2 鍐欐搷浣滅瓑寰呮墍鏈夌殑璇婚攣瑙i攣銆?br>3 璇繪搷浣滀笉闇瑕佺瓑寰呭啓閿佽В閿併?
]]>
鍦ㄤ嬌鐢ㄤ腑涓嶈兘鏀瑰彉銆?br>
BTree 鏁版嵁琚瓨鍌ㄥ湪涓涓帓搴忕殑騫寵 鏍戠粨鏋勪腑銆俴ey鍜寁alue閮藉彲浠ユ槸綆鍗曟暟
鎹紙濡傛暣鍨嬶紝瀛楃涓詫級錛屼篃鍙互鏄鏉傛暟鎹紙濡傜粨鏋勶級銆傚綋鏈夊涓暟鎹殑key
鐩稿悓鏃訛紝鍙互鏈夊鏈?br>
Hash 鏁版嵁瀛樺偍鍦ㄤ竴涓墿灞曠殑綰挎ash琛ㄤ腑銆傚叾浠栫殑鐗規(guī)ц薄BTree銆?br>
Queue 鏁版嵁瀛樺偍鍦ㄤ竴涓槦鍒椾腑錛岃褰曟槸瀹氶暱鐨勩俴ey涓轟竴涓昏緫鏁幫紝涓嶇敱鐢ㄦ埛
閫夋嫨綾誨瀷銆傚湪灝鵑儴鎻掑叆璁板綍錛屽湪澶撮儴鍒犻櫎璁板綍鍜屽彇鍑鴻褰曢潪甯哥殑蹇傛彁渚涗簡
璁板綍姘村鉤緙╋紝鎻愰珮鍦ㄥ茍鍙戜笅鐨勮闂?br>
Recno 鏁版嵁鍙互鏄畾甯告垨鏄彉闀跨殑璁板綍銆傚叾浠栫壒鎬ц薄Queue銆俴ey涔熸槸涓涓昏緫鏁般?br>
鏁版嵁搴撹闂柟娉曠殑閫夋嫨銆?br>鏍規(guī)嵁key鍙惁鐢ㄦ埛瀹氫箟鍒嗕負BTree銆丠ash涓緇勶紝Queue銆丷enco涓緇勩?br>
BTree涓嶩ash涔嬮棿鐨勯夋嫨
濡傛灉鏁版嵁閲忎笉錛岃兘琚斁鍒板唴瀛樹腑銆傝繖縐嶆儏鍐典笅閫夋嫨BTree銆傚嵆鍦ㄥ皬鏁版嵁閲忕殑鎯呭喌涓?br>閫夌敤BTree錛屽師鍥犳槸鍦ㄥ埄鐢╧ey鏉ュ畾涓鴻褰曟椂錛屾垚鍔熺殑鍑犵巼澶т簺銆侶ash鏈夐姝ョ畻娉曘?br>
浣嗘槸鍦ㄥぇ鏁版嵁閲忕殑鎯呭喌涓嬶紝鐢變簬鏁版嵁騫朵笉鑳介兘鍦ㄦ暟鎹簱涓紝瑕佽闂鐩橈紝騫朵笖BTree
瑕佺淮鎶ょ殑鍐呴儴淇℃伅澶т簬Hash錛岃闂鐩樼殑鍑犵巼澶т簬Hash錛屼細閫犳垚璁塊棶鐨勭摱棰堛傛墍浠?br>鍦ㄥぇ鏁版嵁閲忎笅閫夋嫨Hash銆?br>
Queue涓嶳ecno涔嬮棿鐨勯夋嫨
鐢ㄥ湪澶氬茍鍙戜笅鏈濂界敤Queue銆備絾鏄鏋滆褰曟槸鍙橀暱鐨勶紝灝卞彧鑳介塕ecno浜嗐傚湪鍏跺畠鐨勬儏
鍐典笅錛屼袱鑰呮病鏈夋槑鏄劇殑宸埆銆?br>
Berkeley DB鏀寔浠庨潪甯稿皬鐨勬暟鎹簱鍒?56T鐨勬暟鎹閲忕殑鏁版嵁搴撱傚崟涓猭ey鎴杛ecode
鏈澶у彲浠ヤ負4G鐨勬暟鎹?br>
Berkeley DB鐨勬暟鎹簱琚瓨鍌ㄤ負浜岃繘鍒剁殑鏍煎紡錛屾湁鍒╀簬騫沖彴鐨勭Щ妞嶃?br>
Berkeley DB鏀寔騫跺彂鐨勮闂紝浣嗘槸涓嶈兘鐢ㄥ湪NSF錛堢綉緇滄枃浠剁郴緇燂級涓嬨傚洜涓烘棤娉曞畾浣嶅拰
鑾峰緱鏁版嵁搴撶殑鐜錛堝湪鐜涓緗騫跺彂鐨勬帶鍒訛級銆?br>
Berkeley DB鐨勭幆澧冿紙Environments錛夋彁渚涗簡浠ヤ笅鐨勫姛鑳?br>1 澶氭暟鎹簱鏂囦歡錛圡ulti-database files錛夈傚皢澶氫釜鏁版嵁瀛樺偍鍦ㄤ竴涓墿鐞嗘枃浠朵腑銆?br>2 鎻愪緵澶氱嚎紼嬫垨澶氳繘紼嬬殑鏀寔錛圡ulti-thread and multi-process support錛夈?br>3 浜嬪姟澶勭悊
4 楂樺彲鐢ㄦэ紙閲嶅鎬э級鏀寔銆傚嵆涓涓富鏁版嵁搴擄紝鍜屽涓彁渚涘彧璇昏兘鍔涚殑澶嶅埗鏁版嵁搴?br>5 鏃ュ織瀛愮郴緇熴?
]]>
double difftime(
time_t timer1,
time_t timer0
);
double _difftime32(
__time32_t timer1,
__time32_t timer0
);
double _difftime64(
__time64_t timer1,
__time64_t timer0
);
C++鏍囧噯搴撶敤鏉ユ牸寮忓寲杈撳嚭鏃墮棿瀛楃涓?br>澶存枃浠?< time.h >
size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);
size_t _strftime_l(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr,
_locale_t locale
);
size_t wcsftime(
wchar_t *strDest,
size_t maxsize,
const wchar_t *format,
const struct tm *timeptr
);
size_t _wcsftime_l(
wchar_t *strDest,
size_t maxsize,
const wchar_t *format,
const struct tm *timeptr,
_locale_t locale
);
The formatting codes for strftime are listed below:
%a
Abbreviated weekday name
%A
Full weekday name
%b
Abbreviated month name
%B
Full month name
%c
Date and time representation appropriate for locale
%d
Day of month as decimal number (01 – 31)
%H
Hour in 24-hour format (00 – 23)
%I
Hour in 12-hour format (01 – 12)
%j
Day of year as decimal number (001 – 366)
%m
Month as decimal number (01 – 12)
%M
Minute as decimal number (00 – 59)
%p
Current locale's A.M./P.M. indicator for 12-hour clock
%S
Second as decimal number (00 – 59)
%U
Week of year as decimal number, with Sunday as first day of week (00 – 53)
%w
Weekday as decimal number (0 – 6; Sunday is 0)
%W
Week of year as decimal number, with Monday as first day of week (00 – 53)
%x
Date representation for current locale
%X
Time representation for current locale
%y
Year without century, as decimal number (00 – 99)
%Y
Year with century, as decimal number
%z, %Z
Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown
%%
Percent sign
]]>
鍦╯tring綾諱箣闂磋繘琛屽鍒舵病鏈変粈涔堥棶棰樸?br>浣嗘槸瑕佹嫹璐濆埌鍐呭瓨涓椂灝辮娉ㄦ剰銆備竴瀹氳鍦╯tring鍙栧嚭鐨勯暱搴︿笂鍔?銆?br>
濡備笅
char buf[256];
std::string str = "1234567890";
memcpy( buf, str.c_str(), str.length()+1 );
榪欐牱鎵嶈兘鎷瘋礉鍒板瓧絎︿覆鐨勭粨鏉熺‘0’銆傝涓嶅氨鎷瘋礉涓嶅埌銆?br>string鐨刲ength鍑芥暟鍙綆楁湁鏁堝瓧絎︾殑闀垮害銆傚鍚孋涓殑strlen鍑芥暟銆?
]]>
鎵浠ュ湪C++鏍囧噯搴撲腑錛屾祦閮芥槸涓嶅彲鎷瘋礉鐨勫拰璧嬪肩殑銆?br>涓涓被鏈変簡嫻佸璞℃垚鍛橈紝閭d箞瀹冧篃灝變笉鍙嫹璐濆拰璧嬪間簡銆?br>濡傛灉榪涜浜嗘嫹璐濆拰璧嬪間細鍑虹幇榪愯鏃墮敊璇?br>
榪欎篃琛ㄧ幇浜嗕竴縐嶈璁¤寖鍨嬨?br>璧勬簮鍙兘鍦ㄨ祫婧愮殑浣跨敤鑰呬腑淇濆瓨鍏跺簲鐢ㄣ傚茍鍦ㄨ祫婧愮殑浣跨敤鑰呯幆澧冧腑鍒涘緩銆?br>涓嶅悓浣跨敤鑰呬箣闂村彧浼犻掕祫婧愮殑鎻忚堪錛岃屼笉鐩存帴浼犻掕祫婧愩?br>
渚嬪銆?br>涓涓被瑕佷嬌鐢ㄦ枃浠躲?br>鍙紶閫掔粰榪欎釜綾繪枃浠剁殑鎻忚堪錛屽鏂囦歡鍚嶏紝鍋忕Щ閲忕瓑絳夈?br>鑰屼笉浼犱釜浠栦竴涓枃浠躲?br>
榪欎釜綾誨啀鏍規(guī)嵁榪欎簺鎻忚堪鏉ュ紑鍚枃浠躲傚鍏舵搷浣溿?
]]>
tm緇撴瀯涓殑姣忎釜孌墊槸涓涓猧nt綾誨瀷
tm_sec 縐掗挓銆?錛?9銆?br>tm_min 鍒嗛挓銆?錛?9銆?br>tm_hour 灝忔椂銆?錛?3銆戙傛槸浠庡崍澶滃紑濮嬭鏃躲俇TC涓嬫槸鏄互鏍兼灄濞佹不涓烘爣鍑?錛宭ocal涓嬫槸浠ユ湰鍦版椂鍖轟負鏍囧噯0.
gmtime榪斿洖鐨勬槸UTC錛宭ocaltime榪斿洖鐨勬槸鏈湴銆?br>tm_mon 鏈堜喚銆?錛?1銆戙傛敞鎰忔槸0鍒?1.鑰屼笉鏄父鐢ㄧ殑1鍒?2.
tm_year 騫翠喚銆傛槸浠?900騫村紑濮嬭綆椼傚嵆璁板綍鐨勬槸鏈勾涓?900騫寸殑宸箋?br>tm_wday 琛ㄧず鍦ㄤ竴涓槦鏈熶腑鐨勭鍑犲ぉ銆?錛?銆?br>tm_yday 琛ㄧず涓騫翠腑鐨勭鍑犲ぉ銆?錛?65銆戯紝1鏈?鏃ヤ負0
tm_isdst 涓嶆竻妤氾紝鏂囨。涓彧鏄鍦╣mtime涓嬩負0
]]>
time_t mktime(
struct tm *timeptr
);
__time32_t _mktime32(
struct tm *timeptr
);
__time64_t _mktime64(
struct tm *timeptr
);
鑾峰緱緋葷粺鏃墮棿銆?br>澶存枃浠?<time.h>
In Visual C++ 2005, time is a wrapper for _time64 and time_t is, by default, equivalent to __time64_t.
If you need to force the compiler to interpret time_t as the old 32-bit time_t, you can define _USE_32BIT_TIME_T.
This is not recommended because your application may fail after January 18, 2038; the use of this macro is not allowed on 64-bit platforms.
time_t time(
time_t *timer
);
__time32_t _time32(
__time32_t *timer
);
__time64_t _time64(
__time64_t *timer
);
灝嗘椂闂磋漿鎹㈡垚涓涓瓧絎︿覆
澶存枃浠?<time.h>
char *ctime(
const time_t *timer
);
char *_ctime32(
const __time32_t *timer )
;
char *_ctime64(
const __time64_t *timer )
;
wchar_t *_wctime(
const time_t *timer
);
wchar_t *_wctime32(
const __time32_t *timer
);
wchar_t *_wctime64(
const __time64_t *timer
);
灝嗘椂闂磋漿鎹㈡垚涓涓瓧絎︿覆
鏄釜瀹夊叏鐨勭増鏈紝鐢ㄦ潵鏇夸唬涓婇潰鐨勫嚱鏁?br>澶存枃浠?<time.h>
errno_t ctime_s(
char* buffer,
size_t sizeInBytes,
const time_t *time
);
errno_t _ctime32_s(
char* buffer,
size_t sizeInBytes,
const __time32_t *time
);
errno_t _ctime64_s(
char* buffer,
size_t sizeInBytes,
const __time64_t *time )
;
errno_t _wctime_s(
wchar_t* buffer,
size_t sizeInWords,
const time_t *time
);
errno_t _wctime32_s(
wchar_t* buffer,
size_t sizeInWords,
const __time32_t *time
);
errno_t _wctime64_s(
wchar_t* buffer,
size_t sizeInWords,
const __time64_t *time
);
template <size_t size>
errno_t _ctime32_s(
char (&buffer)[size],
const __time32_t *time
); // C++ only
template <size_t size>
errno_t _ctime64_s(
char (&buffer)[size],
const __time64_t *time
); // C++ only
template <size_t size>
errno_t _wctime32_s(
wchar_t (&buffer)[size],
const __time32_t *time
); // C++ only
template <size_t size>
errno_t _wctime64_s(
wchar_t (&buffer)[size],
const __time64_t *time
); // C++ only
灝嗘椂闂村艱漿鎹㈡垚涓涓粨鏋?br>澶存枃浠?<time.h>
struct tm *gmtime(
const time_t *timer
);
struct tm *_gmtime32(
const time32_t *timer
);
struct tm *_gmtime64(
const __time64_t *timer
);
灝嗘椂闂村艱漿鎹㈡垚涓涓粨鏋?br>澶存枃浠?<time.h>
鍚屼笂闈㈠嚱鏁扮殑鍔熻兘錛屾槸瀹夊叏鐗堟湰
errno_t _gmtime_s(
struct tm* _tm,
const __time_t* time
);
errno_t _gmtime32_s(
struct tm* _tm,
const __time32_t* time
);
errno_t _gmtime64_s(
struct tm* _tm,
const __time64_t* time
);
灝嗘椂闂磋漿鎹㈡垚鏈湴鏃墮棿銆?br>澶存枃浠?<time.h>
struct tm *localtime(
const time_t *timer
);
struct tm *_localtime32(
const __time32_t *timer
);
struct tm *_localtime64(
const __time64_t *timer
);
灝嗘椂闂磋漿鎹㈡垚鏈湴鏃墮棿銆?br>澶存枃浠?<time.h>
鍚屼笂闈㈠嚱鏁扮殑鍔熻兘錛屾槸瀹夊叏鐗堟湰
errno_t _localtime_s(
struct tm* _tm,
const time_t *time
);
errno_t _localtime32_s(
struct tm* _tm,
const time32_t *time
);
errno_t _localtime64_s(
struct tm* _tm,
const _time64_t *time
);
clock鍑芥暟
澶存枃浠?<time.h>
clock_t clock( void );
]]>
char_type* 鏄祦瀛楃綾誨瀷鐨勬寚閽堬紝榪欎釜鎸囬拡鏄敤鏉ュ瓨鍌ㄨ璇誨彇鐨勫瓧絎?br>鐨勪綅緗?br>streamsize 鏄瓨鍌ㄧ┖闂村ぇ灝忕殑綾誨瀷錛屽浣峫ong銆?br>
閲嶇偣鍦ㄨ繑鍥炲肩殑綾誨瀷錛屾槸涓涓緭鍏ユ祦綾誨瀷鐨勫簲鐢ㄣ備笉鏄疄闄呯殑璇誨彇鏁版嵁鐨勯暱搴︺?br>瑕佽幏寰楀疄闄呯殑璇誨彇闀垮害瑕佽皟鐢?gcount鍑芥暟銆傚畾涔夊涓?br>streamsize gcount( ) const;
瑕佽幏寰楀綋鍓嶈鍙栫殑浣嶇疆瑕佽皟鐢╰ellg鍑芥暟銆傚畾涔夊涓?br>pos_type tellg( );
鎯寵鐭ラ亾浠ヤ竴鍏辮鍙栦簡澶氬皯鏁版嵁灝卞彲浠ョ敤榪欎釜鍑芥暟銆?br>tellg浼氳煩榪囨牸寮忕銆傚嵆榪斿洖鐨勪綅緗槸璺寵繃鎺у埗絎︾殑銆?br>榪欏氨鏄鍑犱釜gcount鐨勫拰涓嶄竴瀹氱瓑浜巘ellg鐨勫箋傛墍浠?br>鐢ㄦ潵紜畾璇誨彇浣嶇疆鏃朵竴瀹氳鐢╰ellg鍑芥暟銆傝屼笉鑳界敤
gcount鐨勫拰錛屽湪鍋忕Щ錛岃繖浼氫駭鐢熶笉瀵圭殑浣嶇疆銆?br>
鐪嬩笅闈㈢殑渚嬪瓙
int main( int argc, char* argv[] )
{
std::ifstream ifile;
char buf[10];
ifile.open( "example.txt" ); //examplet.txt鏂囦歡涓瘡琛屾湁涓涓洖杞︾
ifile.read( buf, 10 );
size_t size = ifile.tellg(); //size涓?1
size = ifile.gcount(); //size涓?0
ifile.read( buf, 10 );
size = ifile.tellg(); //size涓?2
size = ifile.gcount(); //size涓?0
if( ifile.eof() )
{
return -1;
}
ifile.close();
return 0;
}
璇誨彇榪囩▼涓彲鑳戒細鍑虹幇闂錛屾祦鏄笉淇濊瘉璇誨彇榪囩▼鐨勫畬鏁存с傚嵆瑕佽澶氬皯鏁版嵁錛?br>鍦ㄥ鍒拌繖涔堝鐨勬暟鎹悗鎵嶈繑鍥炪?br>榪欒姹傜紪紼嬩漢鍛樺幓鍒ゆ柇嫻佺殑褰撳墠鐘舵併傚啀榪涜涓嬮潰鐨勫鐞嗐?br>
good鍑芥暟鐭ラ亾褰撳墠鐘舵佹槸濂界殑銆傚嵆涓婁竴涓搷浣滄垚鍔熴傚彲浠ヨ繘琛屼笅涓涓搷浣溿?br>fail鍑芥暟琛ㄧず涓婁竴涓搷浣滃け璐ャ備絾嫻佽繕娌℃湁瀹屽叏鐮村潖錛屽彲浠ヨ繘琛屼竴浜涘鐞嗐?br>bad鍑芥暟琛ㄧず嫻佽鐮村潖鍟︼紝鍒兂浜嗐備笉瑕佸湪澶勭悊榪欎釜嫻佹媺銆?br>eof鍑芥暟琛ㄧず宸插埌嫻佺殑灝鵑儴銆備笉鐢ㄥ啀寰涓嬭鎷夈備笉浼氳鍑烘暟鎹殑銆?br>
int main( int argc, char* argv[] )
{
std::ifstream ifile;
char buf[10];
ifile.open( "example.txt" ); //examplet.txt鏂囦歡涓瘡琛屾湁涓涓洖杞︾
ifile.seekg( 0, ios::end );
ifile.close();
ifile.open( "example.txt" );
//榪欐槸鎴愮珛鐨勩傝鏄庣姸鎬佸茍娌℃湁搴斾負鏂囦歡鐨勫叧闂屾敼鍙樸傚彧瑕佽繖涓璞?br> //鐨勮繕?gòu)z葷潃錛屼粬鐨勪笂涓涓姸鎬佸皢淇濇寔銆傝岃搗浼氬涓嬮潰鐨勬搷浣滀駭鐢熷獎鍝嶃?br> //闄ら潪浣犳竻闄ゆ垨淇敼浜嗙姸鎬併?br> if( ifile.eof() )
{
ifile.close();
return -1;
}
ifile.close();
return 0;
}
]]>
紿楀彛娑堟伅鐨勬槧灝勬槸閫氳繃瀹廙ESSAGE_HANDLER瀹屾垚鐨勩?br>MESSAGE_HANDLER錛?娑堟伅ID錛屾秷鎭鐞嗗嚱鏁?錛夈?br>鑷畾涔夌殑娑堟伅涔熸槸閫氳繃榪欎釜瀹忔潵鏄犲皠鐨?br>
娣誨姞紿楀彛娑堟伅鍑芥暟鍚庣殑瀵硅瘽妗嗙殑瀹氫箟濡備笅
#include < atlapp.h >
#include "resource.h"
const int WM_MY_MESSAGE = WM_USER+1; //鑷畾涔夋秷鎭疘D
class CMainDialog : public CDialogImpl< CMainDialog >
{
public:
enum { IDD = IDD_MAINDLG };
public:
BEGIN_MSG_MAP( CMainDialog )
MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog ) //緋葷粺鐨勭獥鍙f秷鎭槧灝勶紝紿楀彛鍒濆鍖栨秷鎭?br> MESSAGE_HANDLER( WM_MY_MESSAGE, OnMyMessage ) //鑷畾涔夋秷鎭殑鏄犲皠
COMMAND_ID_HANDLER( IDOK, OnOk ) //鎺т歡娑堟伅鐨勬槧灝?br> COMMAND_ID_HANDLER( IDCANCEL, OnCancel )
COMMAND_ID_HANDLER( IDC_SENDMESSAGE_BUTTON, OnSendMyMessage ) //鐢ㄦ潵鍙戦佽嚜瀹氫箟娑堟伅鐨勬寜閽秷鎭槧灝?br> END_MSG_MAP()
public:
//紿楀彛鍒濆鍖栨秷鎭槧灝勫嚱鏁幫紝榪欐槸涓獥鍙g郴緇熸秷鎭?br> LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// center the dialog on the screen
CenterWindow();
return TRUE;
}
LRESULT OnOk( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled )
{
EndDialog( wID );
return 0;
}
LRESULT OnCancel( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled )
{
EndDialog( wID );
return 0;
}
//鍙戦佽嚜瀹氫箟娑堟伅
LRESULT OnSendMyMessage( WORD wNotfyCode, WORD wID, HWND hWndCtl, BOOL &bHandled )
{
//ATL::CWindow鐨凷endMessage鐨勮皟鐢?br> SendMessage( WM_MY_MESSAGE );
return 0;
}
//澶勭悊鑷畾涔夋秷鎭?br> LRESULT OnMyMessage( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled )
{
//ATL::CWindow鐨凪essageBox鐨勮皟鐢?br> MessageBox( "This is MyMessage Handle" ); //寮瑰嚭涓璇濇
return 0;
}
};
]]>
瀵硅瘽妗嗙殑瀹氫箟濡備笅
#include < atlapp.h >
class CMainDialog : public CDialogImpl< CMainDialog >
{
//鐢ㄦ埛浠g爜
}
CDialogImpl綾繪槸WTL涓殑妯″紡瀵硅瘽妗嗙殑鍩虹被銆備粬鍒╃敤浜嗗寮傝嚜閫掑綊妯℃澘鎶鏈紝鏉ヨ幏寰楃戶鎵跨被鐨勫疄闄呰涓恒?br>鏈変簡瀹氫箟鎴戜滑瑕佺粰榪欎釜瀵硅瘽妗嗕竴涓獥鍙h祫婧愩傚緢綆鍗曪紝鍙浠g爜涓畾涔変竴涓狪DD鐨勬灇涓鵑噺灝卞彲浠ヤ簡銆?br>鏋氫婦閲忕殑鍊間負紿楀彛璧勬簮鐨処D銆傚璇濇鐨勫畾涔変唬鐮佹紨鍖栦負濡備笅
#include < atlapp.h >
class CMainDialog : public CDialogImpl< CMainDialog >
{
public:
enum { IDD=IDD_MAINDLG };//涓瀹氳鍦╬ublic鍩燂紝鍚﹀垯娌″姙娉曡闂紝緙栬瘧鏃舵姤閿?br> //鐢ㄦ埛浠g爜
}
灝辮繖鏍瘋繘琛岀紪璇戯紝緙栬瘧鍣ㄤ細鎶ラ敊錛岃CMainDialog鏄釜鎶借薄綾伙紝涓嶈兘瀹炰緥鍖栥?br>鍏跺師鍥犳槸ProessWindowMessage鍑芥暟鏄釜鎶借薄鍦般?br>鎴戜滑鏄笉鏄鎵嬪姩娣誨姞榪欎釜鍑芥暟鍛紵鍙互銆備絾瀵逛簬緙栧啓浠g爜鏉ヨ騫朵笉鏂逛究銆?br>榪欓噷瑕佺敤鍒癆TL涓殑娑堟伅鏄犲皠瀹忎簡銆?br>BEGIN_MSG_MAP( 綾誨悕 )
END_MSG_MAP()
鏈変簡榪欎袱涓畯瀵瑰悗錛屽氨鑷姩鐨勬坊鍔犱簡ProessWindowMessage鍑芥暟浜嗭紝鑰屼笖娣誨姞娑堟伅鏄犲皠鐨勫嚱鏁頒篃鏂逛究銆?br>鐜板湪瀵硅瘽妗嗙殑瀹氫箟浠g爜婕斿寲涓哄涓嬩簡
#include < atlapp.h >
class CMainDialog : public CDialogImpl< CMainDialog >
{
public:
enum { IDD=IDD_MAINDLG };//涓瀹氳鍦╬ublic鍩燂紝鍚﹀垯娌″姙娉曡闂紝緙栬瘧鏃舵姤閿?br>
public:
BEGIN_MSG_MAP( CMainDialog )
END_MSG_MAP()
//鐢ㄦ埛浠g爜
}
鏈変簡浠ヤ笂浠g爜錛屽璇濇灝卞彲浠ユ樉鐜板湪灞忓箷涓婁簡銆備絾鏄繖涓璇濇娌℃湁鍔炴硶鎺ㄥ嚭錛屽簲涓烘病鏈変竴涓秷鎭槧灝勫嚱鏁般?br>鎺ヤ笉鍒版帹鍑虹殑娑堟伅銆?br>鎴戜滑鏈夋坊鍔犱袱涓秷鎭槧灝勶紝鍒嗗埆瀵瑰簲鐣岄潰涓婄殑OK鎸夐挳鍜孋ancel鎸夐挳銆傝繖涓や釜鏄痓utton鎺т歡錛屾垜浠敤鎺т歡鐨勬秷鎭槧灝?br>COMMAND_ID_HANDLER( ID, Fun )銆?br>娣誨姞娑堟伅鏄犲皠鍚庣殑瀵硅瘽妗嗙被瀹氫箟濡備笅
#include < atlapp.h >
class CMainDialog : public CDialogImpl< CMainDialog >
{
public:
enum { IDD=IDD_MAINDLG };//涓瀹氳鍦╬ublic鍩燂紝鍚﹀垯娌″姙娉曡闂紝緙栬瘧鏃舵姤閿?br>
public:
BEGIN_MSG_MAP( CMainDialog )
COMMAND_ID_HANDLER( IDOK, OnOk )
COMMAND_ID_HANDLER( IDCANCEL, OnCancel )
END_MSG_MAP()
public:
LRESULT OnOk( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled )
{
EndDialog( wID );//鎺ㄥ嚭瀵硅瘽妗?br> return 0;
}
LRESULT OnCancel( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled )
{
EndDialog( wID );//鎺ㄥ嚭瀵硅瘽妗?br> return 0;
}
//鐢ㄦ埛浠g爜
};
]]>
{
//鐢ㄦ埛浠g爜
...............
return 0;
}
WTL鏄湪ATL鐨勫熀紜涓婂彂灞曡搗鏉ョ殑錛岃鐢ㄥ埌ATL涓殑妯″潡綾籆ComModule,鎵浠ヨ鍒濆鍖朇OM搴撱?br>鍒濆鍖朇OM搴撹皟鐢–oInitialize錛屽嵏杞紺OM搴撹皟鐢–oUninitialize銆傜▼搴忓艦寮忓涓?br>#include < atlbase.h >
int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
{
CoInitialize錛?NULL 錛?//鐢ㄤ簬搴旂敤紼嬪簭
//鐢ㄦ埛浠g爜
...............
CoUninitialize錛堬級;
return 0;
}
WTL鐨勫簲鐢ㄧ▼搴忛儴鍒嗙殑浠g爜灝佽鍦ㄤ簡CAppModule涓傝瀹氫箟涓涓狢AppModule鐨勫叏灞鍙橀噺錛屼繚璇佸湪紼嬪簭鍚姩鍓嶅氨琚瀯閫犲ソ
CAppModule鏄戶鎵跨殑ATL涓殑CComModule綾匯傜▼搴忓艦寮忔紨鍙樻垚濡備笅
#include < atlbase.h >
#include < atlapp.h > //WTL瑕佺敤鍒扮殑
int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
{
CoInitialize錛?NULL 錛?//鐢ㄤ簬搴旂敤紼嬪簭
_Module.Init( NULL, hInstance );//鍒濆鍖栦竴涓簲鐢ㄧ▼搴?br> //鐢ㄦ埛浠g爜
...............
_Module.Term();//閿姣?br> CoUninitialize錛堬級;
return 0;
}
]]>
鍐嶈鍙栧綋鍓嶄綅緗紝榪欏氨鏄枃浠剁殑澶у皬浜嗐?br> long filelength = ifile.tellg();
]]>
read鎴愬憳鍑芥暟錛岀敤鏉ヨ鍙栨暟鎹埌鎸囧畾鐨刡uf涓?br>榪欎釜鎴愬憳鍑芥暟鏉ヨ嚦basic_istream綾匯?br>鍑芥暟鍘熷瀷錛堟潵鐩碝SDN鏂囨。錛?br>basic_istream& read( char_type *_Str, streamsize _Count );
_Str 瀛楃鎸囬拡
_Count 瑕佽鍙栫殑瀛楃鏁伴噺
get鎴愬憳鍑芥暟錛岀敤鏉ヨ鍙栦竴涓垨澶氫釜瀛楃
榪欎釜鎴愬憳鍑芥暟鏉ヨ嚦basic_istream綾匯?br>鍑芥暟鍘熷瀷錛堟潵鐩碝SDN鏂囨。錛?br>int_type get( ); 璇誨彇涓涓瓧絎︼紝涓嶈繃鏄綔涓篿nt綾誨瀷榪斿洖
basic_istream& get( char_type& _Ch ); 璇誨彇涓涓瓧絎?br>basic_istream& get( char_type *_Str, streamsize _Count ); 璇誨彇鎸囧畾鏁伴噺鐨勫瓧絎?br>basic_istream& get( char_type *_Str, streamsize _Count, char_type _Delim ); 璇誨彇鎸囧畾鏁伴噺鐨勫瓧絎︼紝浣嗕笌鍒頒笌_Delim鐩稿悓鐨勫瓧絎﹀氨鍋滄
basic_istream& get( basic_streambuf<Elem, Tr> *_Strbuf );
basic_istream& get( basic_streambuf<Elem, Tr> *_Strbuf, char_type _Delim );
peek鎴愬憳鍑芥暟錛岀敤鏉ヨ繑鍥炰笅涓涓瓧絎︼紝褰撲笉浠巌stream鐨刡uf涓Щ鍑?br>榪欎釜鎴愬憳鍑芥暟鏉ヨ嚦basic_istreamlei銆?br>鍑芥暟鍘熷瀷錛堟潵鑷矼SDN鏂囨。錛?br>int_type peek( );
getline鎴愬憳鍑芥暟錛岀敤鏉ヨ鍙栦竴琛屾暟鎹?br>榪欎釜鎴愬憳鍑芥暟鏉ヨ嚦basic_istream綾?br>鍑芥暟鍘熷瀷錛堟潵鑷矼SDN鏂囨。錛?br>basic_istream& getline( char_type *_Str, streamsize _Count );
basic_istream& getline( char_type *_Str, streamsize _Count, char_type _Delim );
readsome鎴愬憳鍑芥暟錛岀敤浜庤鍙栨寚瀹氭暟閲忕殑鏁版嵁鍒癰uf涓?br>榪欎釜鍑芥暟鏉ヨ嚦basic_istream綾匯?br>鍑芥暟鍘熷瀷錛堟潵鑷矼SDN鏂囨。錛?br>streamsize readsome( char_type *_Str, streamsize _Count );
>>榪愮畻絎﹂噸杞?br>瀵笴++鍩烘湰綾誨瀷榪涜浜嗛噸杞芥搷浣溿傚彲浠ョ洿鎺ヨ鍙栬繖浜涙暟鎹備絾浼氳煩榪囨帶鍒跺瓧絎︺?br>鐢ㄦ埛鍙互鎵╁睍榪欎釜榪愮畻絎︽搷浣滅殑綾誨瀷銆?br>榪欎釜璇誨彇鏄湁綾誨瀷鐨勩?br>
]]>
鎵撳紑鏂囦歡
鍙互鍦ㄥ楂樻枃浠舵祦瀵硅薄鏃剁洿鎺ユ墦寮
ifstream ifile( 鏂囦歡鍚?)
ofstream ofile( 鏂囦歡鍚?)
fstream file( 鏂囦歡鍚?)
涔熷彲浠ョ敤open琛屼負
ifstream ifile
ifile.open( 鏂囦歡鍚?)
ofstream ofile
ofile.open( 鏂囦歡鍚?)
fstream file
file.open( 鏂囦歡鍚?)
鍏抽棴鏂囦歡
鏂囦歡瀵硅薄閿姣佹椂鑷姩鍏抽棴鏂囦歡銆?br>涔熷彲鐢╟lose鍏抽棴鏂囦歡銆?br>ifile.close()
ofile.close()
file.close()
鏂囦歡澶у紑鏀懼紡鏍囪嚧
榪欏啓鏍囪嚧瀹氫箟鍦╥so_base綾諱腑銆傚垎鍒涓?br>in 鎵撳紑錛岀敤浜庤鍙栵紙榪欐槸ifstream鐨勭己鐪佹ā寮忥級
out 鎵撳紑錛岀敤浜庢敼鍐欙紙榪欐槸ofstream鐨勭己鐪佹ā寮忥級
app 鍐欏叆鏄緇堟坊鍔犱笌灝劇
ate 鎵撳紑鏂囦歡涔嬪悗浠よ鍐欎綅緗Щ鑷蟲枃浠跺熬绔?br>trunc 灝嗗厛鍓嶇殑鏂囦歡鍐呭縐婚櫎
binary 浜岃繘鍒舵柟寮忔墦寮
榪欎簺鏍囪嚧鍜屾垨鍦ㄤ竴璧楓?br>榪欎簺鏍囪嚧浣滀負瀵硅薄鏋勯犳垨open琛屼負鐨勭浜屼釜鍙傛暟錛屾潵瀹氫箟鏂囦歡鎵撳紑鍒嗘柟寮忋?br>
闅忔満瀛樺偍
鐢ㄤ簬璇繪枃浠剁殑闅忔満瀛樺偍
tellg錛堬級 榪斿洖璇誨彇鐨勪綅緗?br>seekg( pos ) 浠庡綋鍓嶄綅緗Щ鍔╬os涓綅瀛愶紙緇濆縐婚侊級
seekg( offset, rpos ) 浠pos浣嶇疆寮濮嬬Щ鍔╫ffset涓綅緗紙鐩稿縐誨姩錛?br>
鐢ㄤ簬鍐欐枃浠剁殑闅忔満瀛樺偍
tellp() 榪斿洖鍐欏叆鐨勪綅緗?br>seekp( pos ) 浠庡綋鍓嶄綅緗Щ鍔╬os涓綅瀛愶紙緇濆縐婚侊級
seekp( offset, rpos ) 浠pos浣嶇疆寮濮嬬Щ鍔╫ffset涓綅緗紙鐩稿縐誨姩錛?br>
璇繪暟鎹?br>鍒╃敤read琛屼負
ifstream ifile
ifile.read錛坆uf,length錛?br>
鍐欐暟鎹?br>鍒╃敤write琛屼負
ofstream ofile
ofile.write錛坆uf,length錛?
]]>
]]>
]]>
{
basic_connection* con = new basic_connection();
con->signal = static_cast<void*>(this);
con->signal_data = 0;
con->blocked_ = false ;
con->signal_disconnect = &bound_object_destructed;
}
data->watch_bound_objects.reset(con);
i != data->bound_objects.end(); ++i)
{
BOOST_SIGNALS_NAMESPACE::detail::bound_object binding;
(*i)->signal_connected(data->watch_bound_objects, binding);
disconnector.release();
}
data->watch_bound_objects.set_controlling(true);
}
]]>
(size_t)&(((classname*)0)->members)
classname 鏄竴涓被鍚嶏紝members鏄被涓換浣曚竴涓暟鎹垚鍛樼殑鍚嶅瓧銆?鍦ㄨ繖閲屾槸涓涓湴鍧錛岃繖鏄竴涓繚鐣欏湴鍧錛屽畠涓嶈兘浣滀負宸﹀鹼紝浣嗗彲浠ヤ綔涓哄彸鍊鹼紝鍘繪彁鍙栧叾涓殑瀵硅薄銆?br> 鍦?鍦板潃浣嶏紝鏋勯犱簡涓涓猚lassname鐨勭粨鏋勫竷灞銆?br>
鍦ㄤ嬌鐢ㄤ腑鍘繪瘡嬈″啓榪欎釜琛ㄨ揪寮忚繕鏄緢楹葷儲鐨勩傚彲浠ョ敤涓畯灝嗗叾鍖呰搗鏉ワ紝濡備笅
#difine offsetof( ClassName, MemberName ) (size_t)&(((classname*)0)->members)
鍏跺疄榪欎釜瀹忓湪windows鍜宭inux騫沖彴涓嬮兘浠ユ彁渚涗簡銆?
]]>
thinking in c++ 涔媠tatic灝忕粨
鏈殑鍚箟鏄細“浣嶇疆涓嶅彉鐨勬煇涓笢瑗?#8220;錛岃繖閲屾寚鐨勬槸鍐呭瓨涓殑浣嶇疆鎴栬呮枃浠朵腑鐨勫彲瑙佹?br>1錛屽湪c鍜宑++涓紝static鐨勪袱縐嶅惈涔夛細
錛?錛夛紝闈欐佸瓨鍌ㄣ?br>錛?錛夛紝瀵逛竴涓壒瀹氱殑緙栬瘧鍗曞厓鏉ヨ鏄湰鍦扮殑錛岃繖涓悕瀛楀湪榪欎釜鍗曞厓鎴栫被涔嬪涓嶅彲瑙併?/p>
錛?錛夛紝闈欐佹垚鍏冨嚱鏁頒負璇ョ被鐨勫叏浣撴湇鍔★紝鑰屼笉鏄負綾葷殑閮ㄥ垎瀵硅薄鏈嶅姟錛?br>錛?錛?闈欐佹垚鍛樺嚱鏁頒笉鑳借闂竴鑸殑鏁版嵁鎴愬憳錛屽彧鑳借闂潤鎬佹暟鎹垚鍛橈紝騫朵笖鍙兘璋冪敤闈欐佹垚鍏冨嚱鏁般?/p>
鐢變簬褰撳墠瀵硅薄鐨勫湴鍧鏄闅愯棌鐨勪紶閫掔粰琚皟鐢ㄧ殑鍑芥暟鐨勶紝鐢變簬闈欐佹垚鍛樺嚱鏁頒笉鏄煇涓璞$嫭鏈夌殑錛屾墍浠ユ病鏈塼his鎸囬拡錛屾墍浠ユ棤娉曡皟鐢ㄨ皟鐢ㄦ櫘閫氭垚鍛樺嚱鏁幫紝鍚屾牱瀵規(guī)櫘閫氭垚鍛樺彉閲忕殑璁塊棶涔熺敤鍒頒簡this鎸囬拡銆?br>
緙栬瘧鍗曞厓
緇忚繃棰勫鐞嗕箣鍚庣殑鏂囦歡錛堣繖涓槸鍐呭瓨涓殑涓存椂鏂囦歡錛?br>#include鍦ㄩ澶勭悊鏃惰灞曞紑錛屽畯涔熶竴鏍?/p>
鏁翠釜紼嬪簭鐨勫涓?obj鍔犺搗鏉?緇忚繃閾炬帴) = .exe錛堝彲鎵ц鏂囦歡錛?
棰勫鐞?br>-----------
鎶婁竴浜涘甫#鍙風殑錛屾瘮鏂硅瀹忓畾涔夛紝棰勫鐞嗗懡浠わ紙#include錛夌瓑
鍐呴儴榪炴帴涓庡閮ㄨ繛鎺?br>鍦ㄨ鍐呴儴榪炴帴涓庡閮ㄨ繛鎺ュ墠錛屽厛璇存槑涓浜涙蹇點?
銆銆浠ヤ笅閮芥槸澹版槑錛?
{
銆static int i;
銆static int i;//涓嶅彲浠?
銆public:
銆銆int foo();
銆銆int foo();//涓嶅彲浠?
};
銆long a;
銆char b[10];
};
{
Int i = red;
return i;
}
銆long a;
銆char b[10];
};
{
銆int foo(); //鍑芥暟澹版槑錛屽唴閮ㄨ繛鎺?br>銆static int i = 0; //鍚嶅瓧絀洪棿闈欐佸彉閲忓畾涔夛紝鍐呴儴榪炴帴
銆static int foo() { return 0;} //鍚嶅瓧絀洪棿闈欐佸嚱鏁板畾涔夛紝鍐呴儴榪炴帴
}
static int foo() {return 1;} //鍏ㄥ眬闈欐佸嚱鏁板畾涔夛紝鍐呴儴榪炴帴
const int k = 0; //鍏ㄥ眬const甯擱噺瀹氫箟錛屽唴閮ㄨ繛鎺?br>int main(void)
{
銆return 0;
}
{
銆int i = 0; //鍚嶅瓧絀洪棿鍙橀噺瀹氫箟錛屽閮ㄨ繛鎺?br>銆int foo() {return 0;} //鍚嶅瓧絀洪棿鍑芥暟瀹氫箟錛屽閮ㄨ繛鎺?br>}
{
銆static int s_i; //闈欐佺被鎴愬憳澹版槑錛屽唴閮ㄨ繛鎺?
銆public:
銆銆void foo() { ++s_i;} //綾籭nline鍑芥暟錛屽唴閮ㄨ繛鎺?br>};
struct D
{
銆void foo(); //綾繪垚鍛樺嚱鏁板0鏄庯紝鍐呴儴榪炴帴
};
void D::foo() //綾繪垚鍛樺嚱鏁板畾涔夛紝澶栭儴榪炴帴
{
銆cout << "D::foo in main.cpp" <
}
銆B b;
銆D d;
銆return 0;
}
{
銆int k;
};
{
銆int d;
};
銆int d;
銆void foo(); //綾繪垚鍛樺嚱鏁板0鏄?br>};
void D::foo() //綾繪垚鍛樺嚱鏁板畾涔夛紝澶栭儴榪炴帴
{
銆cout << " D::foo in a.cpp" <
}
{
銆public:
銆銆static int f() { return 2;} //inline 綾婚潤鎬佸嚱鏁幫紝鍐呴儴榪炴帴
銆銆int g(int i) { return i;} //inline 綾繪垚鍛樺嚱鏁幫紝鍐呴儴榪炴帴
};
{
銆public:
銆銆inline int k()錛?//綾繪垚鍛樺嚱鏁板0鏄庯紝鍐呴儴榪炴帴
}錛?/p>
int main(void)
{
銆return 0;
}
]]>
緙栬瘧鍣ㄤ笉浼氬幓緙栬瘧'.h'鎴栬?.hpp'鏂囦歡銆?br>緙栬瘧鍣ㄥ彧浼氱紪璇?.c'鎴?.cpp'鏂囦歡銆?/p>
鍦ㄧ紪璇戝櫒涓畬鎴愶級瀹屾垚榪欎喚宸ヤ綔銆?/p>
A metafunction is a class or a class template that represents a function invocable at compile-time.
涓涓師鎿嶄綔鏄湪緙栬瘧鍣ㄨ〃鐜頒簡璋冪敤鎿嶄綔鐨勪竴涓被鎴栦竴涓ā鏉跨被銆?/p>
涓涓潪鏃犲弬鐨勫師鎿嶄綔琚竴涓湁璇︾粏妯℃澘鍙傛暟鐨勬ā鏉跨被璇鋒眰錛?br>the result of the metafunction application is accessible through the instantiation's nested type typedef.
鍘熸搷浣滃簲鐢ㄧ殑榪斿洖鍊兼槸涓涓氳繃妯℃澘綾誨疄渚嬪彲鍙栫殑鍐呭祵鐨勭被鍨嬪畾涔夈?/p>
鎵鏈夌殑鍘熸搷浣滅殑鍙傛暟蹇呴』鏄被鍨嬨?/p>
涓涓師鎿嶄綔鑳芥湁涓涓暟閲忓彉鍖栫殑鍙傛暟
涓涓棤鍙傛暟鍘熸搷浣滆琛ㄧ幇涓烘湁鍐呭祵閲嶅懡鍚嶇被鍨嬬殑綾?/p>
2 f<>::type
3 f< a1,..,an >::type
Lambda Expression 鏋勯犲拰鍒嗛厤琛ㄨ揪寮?/p>
涓涓瀯閫犲拰鍒嗛厤琛ㄨ揪寮忔槸涓嬮潰涓や釜涓殑涓涓紪璇戞湡璋冪敤鍗曞厓
鍘熸搷浣滅被
绔欎綅絎﹁〃杈懼紡
澶ч儴鍒嗙殑MPL緇勪歡鎺ユ敹瀹冧滑鍏朵腑涓涓紝
]]>