锘??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜精品久久久久,亚洲社区在线观看,亚洲国产综合在线http://www.shnenglu.com/longshanks/zh-cnWed, 24 Sep 2025 05:38:25 GMTWed, 24 Sep 2025 05:38:25 GMT60涓夊彧灝忕尓http://www.shnenglu.com/longshanks/archive/2008/09/18/62213.htmllongshankslongshanksThu, 18 Sep 2008 11:25:00 GMThttp://www.shnenglu.com/longshanks/archive/2008/09/18/62213.htmlhttp://www.shnenglu.com/longshanks/comments/62213.htmlhttp://www.shnenglu.com/longshanks/archive/2008/09/18/62213.html#Feedback3http://www.shnenglu.com/longshanks/comments/commentRss/62213.htmlhttp://www.shnenglu.com/longshanks/services/trackbacks/62213.html涓夊彧灝忕尓
鑾崕鏋?br>

    灝忔椂鍊欏惉璇磋繃涓夊彧灝忕尓鐨勬晠浜嬶紝闅愮害璁板緱鏁呬簨鏄涓夊彧灝忕尓鐢ㄤ笉鍚屾柟娉曢犳埧瀛愶紝瀵規姉鑰佺嫾銆傝繖浜涘ぉ鍋氳蔣浠訛紝閬囧埌涓涓棤姣旂畝鍗曠殑闂錛屼絾鍦ㄤ笁縐嶄笉鍚岀殑璇█涓紝鍗存湁鐫鎴劧涓嶅悓鐨勮В娉曘?br>
    鏈榪戯紝鍐蜂笉涓佸湴鎺ュ埌鍏徃涓嬫淳鐨勪竴涓揣鎬ヤ換鍔★紝鍋氭墜鎸丳OS鍜孭C紼嬪簭涔嬮棿浜ゆ崲鏁版嵁鐨勭▼搴忋傚悇縐嶅悇鏍風殑楹葷儲涓紝鏈変竴涓皬寰椾笉璧風溂鐨勯棶棰橈紝POS鏈轟腑鏁版嵁鐨勫瓧 鑺傚簭鍜孭C鐩稿弽銆傝繖鍙笉綆楁槸浠涔堝晩銆傛病閿欙紝鏄湪澶畝鍗曚簡銆傚敖綆″姝わ紝榪樻槸寮曞彂浜嗕竴鍦轟簤璁恒傚仛POS紼嬪簭鐨勶紝甯屾湜PC紼嬪簭鍋氳漿鎹€傚仛PC紼嬪簭鐨勶紝甯屾湜POS 紼嬪簭鍋氳漿鎹€傦紙璋侀兘鎯沖皯鍋氱偣錛屽鍚?)錛夈傛渶緇堬紝浣滀負鍜屼簨浣殑鎴戯紝涓轟簡緇存姢鍜岃皭鐨勬皼鍥達紝鎻戒笅浜嗚繖浠朵簨銆傚綋鐒訛紝鍒板簳鍦ㄩ偅閲屽仛錛岃繕鏄鍐沖畾鐨勩傛渶緇堥夋嫨鍦≒C 涓婏紝姣曠珶PC涓婅皟璇曡搗鏉ュ鏄撱傦紙澶╃厼鐨勶紝榪欎釜POS鏈烘病鏈塪ebug錛屼篃娌℃湁妯℃嫙鍣紝鏄劇ず灞忚繕娌℃垜鎵嬫満鐨勫ぇ錛屽仛璧鋒潵鐫瀹炶垂浜嬶級銆?br>    鍏跺疄錛屾垜鐨勬湰鎰忔槸鎯沖湪POS涓婂仛榪欎釜杞崲銆傚洜涓篜OS鐢ㄧ殑鏄疌錛堜竴涓笉鐭ヤ粈涔堝勾浠g殑gcc錛夛紝鍙互鐩存帴鎿嶄綔瀛楄妭銆傚熀鏈殑浠g爜鐪嬭搗鏉ュ樊涓嶅搴旇鏄繖鏍鳳細
        unsigned long InvData(unsigned long val, int n) {
            unsigned long t=val, res=0;
            for(; n >0; n--)
            {
                res = res << 8;
                res |= (unsigned char)t;
                t = t >> 8;
            }
            return res;
        }
    n鏄暟鎹被鍨嬬殑瀛楄妭闀垮害銆傝繖閲屼嬌鐢ㄤ簡鏈闀跨殑鏃犵鍙鋒暣鏁扮被鍨嬨傝繖鏄牳蹇冭漿鎹㈠嚱鏁幫紝鍚勭綾誨瀷鐨勮漿鎹㈠嚱鏁伴兘鍙互浠庝腑媧劇敓錛?br>        long InvDataLong(long val) {
            return (long)InvData((unsigned long)val, sizeof(val));
        }
        short InvDataShort(short val) {
            return (short)InvData((unsigned short)val, sizeof(val));
        }
        ...
    鏈鍚庯紝鏈変竴涓瘮杈冪壒孌婄殑鍦版柟錛宖loat銆俧loat鐨勭紪鐮佷笉鍚屼簬鏁村瀷錛屽鏋滅洿鎺ョ敤(unsigned long)寮哄埗綾誨瀷杞崲錛屽彧浼氭妸float鏁板肩殑鏁存暟閮ㄥ垎璧嬩簣鍙傛暟錛屽緱涓嶅埌姝g‘鐨勭粨鏋溿傛紜殑鍋氭硶錛屽簲褰撴槸鎶奻loat鍗犵敤鐨勫洓涓瓧鑺傜洿鎺ユ槧灝勬垚涓涓? unsigned long錛?br>        float InvDataFloat(float val) {
            float val=InvData(*(unsigned long*)(&val), sizeof(val));
            return *(float*)(&val);
        }
    閫氳繃灝唂loat鍙橀噺鐨勫湴鍧寮哄埗杞崲鎴恥nsigned long*綾誨瀷錛岀劧鍚庡啀dereference鎴恥nsigned long綾誨瀷銆傚綋鐒惰繕鏈夊叾浠栧姙娉曪紝姣斿memcpy錛岃繖閲屽氨涓嶅璇翠簡銆傝嚦浜巇ouble綾誨瀷錛屼負浜嗙畝鍖栭棶棰橈紝榪欓噷灝嗗叾蹇界暐銆傚鏋滄湁64浣嶇殑鏁村瀷錛岄偅涔? double鍙互閲囩敤綾諱技鐨勮В娉曘傚惁鍒欙紝灝卞繀欏誨啓涓撻棬鐨勫鐞嗗嚱鏁般?br>    褰撶劧錛屾渶緇堟垜榪樻槸浣跨敤C#鍐欒繖涓漿鎹€傜浉姣斾箣涓嬶紝C#鐨勮漿鎹唬鐮佹樉寰楁洿鍏風幇浠i鍛熾傚熀鏈畻娉曡繕鏄竴鏍鳳細
        public static ulong DataInv(ulong val, int n)
        {
            ulong v1_ = val, v2_ = 0;

            for (; n > 0; n--)
            {
                v2_ <<= 8;
                v2_ |= (byte)v1_;
                v1_ >>= 8;
            }

            return v2_;
        }
    瀵逛簬涔犳儻浜嶤/C++鐨勫悓瀛︿滑娉ㄦ剰浜嗭紝long/ulong鍦–#涓笉鏄?瀛楄妭錛岃屾槸8瀛楄妭銆備篃灝辨槸C/C++涓殑longlong銆備互榪欎釜鍑芥暟涓哄熀紜錛屽叾瀹冩暣鏁扮被鍨嬬殑瀛楄妭搴忚漿鎹篃灝辨湁浜嗭細
        public static ulong DataInv(ulong val)
        {
            return DataInv(val, sizeof(ulong));
        }

        public static uint DataInv(uint val)
        {
            return (uint)DataInv((ulong)val, sizeof(uint));
        }

        public static int DataInv(int val)
        {
            return (int)DataInv((uint)val);
        }
        ...
    鐒惰岋紝闈㈠float錛屽嚭鐜頒簡楹葷儲銆傚湪C#涓紝娌℃湁鎸囬拡錛屾棤娉曡薄C閭f牱灝唂loat灞曞紑鎴恥long銆傦紙unsafe浠g爜鍙互鎵ц榪欑被鎿嶄綔錛屼絾榪欎笉鏄疌#瀚′翰鐨勭壒鎬э紝騫朵笖鏄繚鑳孋#璁捐鐞嗗康鐨勩傝繖閲屼笉鍋氳冭檻錛夈侰#鎻愪緵浜嗗彟涓縐嶉鏍肩殑鎿嶄綔錛?br>        public static float DataInv(float val)
        {
            float res_ = 0;

            byte[] buf_ = BitConverter.GetBytes(val);
            byte t = 0;

            t = buf_[0];
            buf_[0] = buf_[3];
            buf_[3] = t;

            t = buf_[1];
            buf_[1] = buf_[2];
            buf_[2] = t;

            res_ = BitConverter.ToSingle(buf_, 0);

            return res_;
        }
    榪欎釜鍋氭硶灝界鏈変簺绱禈錛屼絾閬撶悊涓婂緢綆鍗曪細鎶奻loat鍙橀噺杞崲鎴愪竴涓瓧鑺傛祦錛岀劧鍚庢妸鐩稿簲鐨勪綅緗璋冿紝灝辮幏寰椾簡瀛楄妭鍙嶅簭鐨刦loat銆傜浉姣擟鐨刦loat杞? 鎹紝C#鏄庢樉涓嶅綆緇冦傚師鍥犲緢綆鍗曪紝C#鏍規湰涓嶆槸鐢ㄦ潵騫茶繖涓殑銆侰鏄竴縐嶉潪甯稿簳灞傜殑璇█錛屽畠鐨勫唴瀛樻ā鍨嬫槸瀹屽叏鐩磋鐨勶紝涓庣‖浠剁郴緇熺浉瀵瑰簲鐨勩傚洜鑰岋紝瀵逛簬榪欑 涓庢満鍣ㄧ浉鍏崇殑鎿嶄綔錛屽綋鐒朵篃鏄懼緱娓稿垉鏈変綑銆傝孋#瀹氫綅浜庨珮灞傚紑鍙戠殑楂樼駭璇█錛屽簳灞傜殑鍐呭瓨妯″瀷鏄灞忚斀鐨勶紝紼嬪簭鍛樻棤闇鐭ラ亾鍜屽叧蹇冦?br>    涓嶈繃錛孋#鐨勪唬鐮佸嵈鎷ユ湁瀹冪殑浼樺娍銆傚彧闇鐪嬩竴鐪艱繖浜涘嚱鏁扮殑浣跨敤浠g爜錛屼究涓嶈█鑷槑浜嗭細
        //C浠g爜
        int x=234;
        float y=789.89;
        short z=332;
        x=InvDataInt(x);
        y=InvDataFloat(y);
        z=InvDataShort(z);

        //C#浠g爜
        int x=234;
        float y=789.89;
        short z=332;
        x=DataInv(x);
        y=DataInv(y);
        z=DataInv(z);
    鍦–浠g爜涓紝瀵逛簬涓嶅悓鐨勭被鍨嬶紝闇瑕佷嬌鐢ㄤ笉鍚屽懡鍚嶇殑鍑芥暟銆傝屽湪C#浠g爜涓紝鍒欏彧闇浣跨敤DataInv榪欐牱涓涓嚱鏁板悕銆傝嚦浜庡眾鏃墮夌敤閭d釜鐗堟湰鐨勫嚱鏁幫紝緙栬瘧鍣ㄤ細 鏍規嵁瀹為檯鐨勭被鍨嬭嚜鍔ㄥ尮閰嶃侰#榪愮敤鍑芥暟閲嶈澆榪欎釜鐗規э紝浣垮緱璋冪敤浠g爜鍙互閲囩敤緇熶竴鐨勫艦寮忋傚嵆渚挎槸鏁版嵁鐨勭被鍨嬫湁鎵鍙樺寲錛屼篃鏃犻渶瀵硅皟鐢ㄤ唬鐮佸仛浠諱綍淇敼銆傦紙榪欏湪鎴? 鐨勫紑鍙戣繃紼嬩腑鐨勫緱鍒頒簡楠岃瘉錛屼紶杈撴暟鎹殑鎴愬憳綾誨瀷鏇劇粡鍙戠敓鍙樺寲錛屾垜涔熷彧鏄慨鏀逛簡鏁版嵁緇撴瀯鐨勫畾涔夛紝渚垮皢闂鎼炲畾錛夈傝繖涓鐐癸紝鍦–涓槸鏃犳硶鍋氬埌鐨勩?br>    褰掔粨璧鋒潵錛孋鐢變簬渚ч噸浜庡簳灞傦紝鍦ㄦ暟鎹漿鎹㈡柟渚跨殑鐏墊椿鎬э紝浣垮緱杞崲浠g爜鐨勬瀯寤烘洿鍔犲鏄撱傝孋#鍒欏緱鐩婁簬鍑芥暟閲嶈澆錛屽湪杞崲浠g爜浣跨敤鏂歸潰錛屾湁鐙埌鐨勪紭鍔褲?br>    榪勪粖涓烘錛屼笁鍙皬鐚腑錛岃繕鍙湁涓ゅ彧鍑虹幇銆備笅闈㈠氨瑕佺涓夊彧鍑哄満浜嗐?br>    浣滀負C++鐨勭矇涓濓紝鎴戜細鑷劧鑰岀劧鍦版兂鍒頒嬌鐢–++鏉ュ疄鐜拌繖涓漿鎹㈠姛鑳姐備簬鏄究鏈変簡濡備笅鐨勪唬鐮侊細
       unsigned long InvData(unsigned long val, int n) {
            unsigned long t=val, res=0;
            for(; n >0; n--)
            {
                res = res << 8;
                res |= (unsigned char)t;
                t = t >> 8;
            }
        }
        long InvData(long val) {
            return (long)InvData((unsigned long)val, sizeof(val));
        }
        short InvData(short val) {
            return (short)InvData((unsigned short)val, sizeof(val));
        }
        ...
        float InvData(float val) {
            float val=InvData(*(unsigned long*)(&val), sizeof(val));
            return *(float*)(&val);
        }
    榪欎簺浠g爜灝卞ソ璞℃槸C鍜孋#浠g爜鐨勬潅浜ゅ悗浠c傛棦鏈塁鐨勫簳灞傛搷浣滐紝涔熸湁C#鐨勫嚱鏁伴噸杞斤紝鍏兼湁涓よ呯殑浼樼偣銆?br>    涓嶈繃錛岃繕鑳藉仛寰楁洿濂斤細
        template<typename T>
        T InvData(T val) {
            T t=val, res=0;
            int n=sizeof(T);
            for(; n >0; n--)
            {
                res = res << 8;
                res |= (unsigned char)t;
                t = t >> 8;
            }
            return (T)res;
        }
    榪欐牱錛屽氨鎶婃墍鏈夌殑鏁村瀷閮戒竴緗戞墦灝戒簡錛屼粎鐢ㄤ竴涓嚱鏁版ā鏉匡紝渚垮畬鎴愪簡鍘熷厛璇稿鍑芥暟鎵鍋氱殑宸ヤ綔銆傝宖loat鐗堟湰鐨勫嚱鏁板垯淇濇寔涓嶅彉錛屼綔涓篒nvData()鐨勪竴涓噸杞姐傛寜鐓++鐨勫嚱鏁版ā鏉?閲嶈澆瑙勫垯錛宖loat鐗堢殑鍑芥暟閲嶈澆灝嗚浼樺厛浣跨敤銆?br>
    濂戒簡錛屼笁鍙皬鐚殑鏁呬簨璁插畬浜嗐傚墠涓ゅ彧灝忕尓鍚勬湁浼樼偣錛屼篃鍚勬湁緙虹偣銆傝岀涓夊彧灝忕尓鍒欐潅鍚堝拰鍓嶄袱鑰呯殑浼樼偣錛屽茍涓斿叿鏈夋洿澶х殑榪涙銆傚敖綆$涓夊彧灝忕尓瀛樺湪鍚勭鍚勬牱鐨勭己闄鳳紝浣嗘瘯绔熷畠鐨勪紬澶氱壒鎬т負鎴戜滑甯︽潵浜嗗緢澶氭晥鐜囧拰鏂逛究錛岃繖浜涜繕鏄簲褰撳煎緱鑲畾鐨勩?

闄勶細絎笁鍙皬鐚殑鍏朵粬鎵嬫錛?br>1銆佸己鍒惰漿鎹㈡垚瀛楃涓叉暟緇?br>template<typename T>
T InvData1(T v) {
    unsigned char* pVal1=(unsigned char*)(&v)
        , *pVal2=pVal1+sizeof(T)-1, t;
    while(pVal2-pVal1>1)
    {
        t=*pVal2;
        *pVal2=*pVal1;
        *pVal1=t;
        pVal1++;
        pVal2--;
    }
    return v;
}
2銆佷嬌鐢ㄦ爣鍑嗗簱錛宐log涓婃湁浜虹暀璦寤鴻鐨?br>template<typename T>
T InvData(T v) {
    unsigned char* pVal=(unsigned char*)(&v);
    size_t n=sizeof(T);
    std::reverse(pVal, pVal+n, pVal);
}
3銆佷嬌鐢╰raits
template<size_t n> struct SameSizeInt;
template<> struct SameSizeInt<1> { typedef unsigned char Type; };
template<> struct SameSizeInt<2> { typedef unsigned short Type; };
template<> struct SameSizeInt<4> { typedef unsigned long Type; };
template<> struct SameSizeInt<8> { typedef unsigned longlong Type; };

template<typename T>
T InvData(T v) {
    size_t n=sizeof(T);
    typedef SameSizeInt<sizeof(T)>::Type NewT;
    NewT v1=*(NewT*)(&v), v2=0;
    for(; n >0; n--)
    {
        v2= v2<< 8;
        v2|= (unsigned char)v1;
        v1 = v1 >> 8;
    }
    return *(T*)(&v2);
}

鐢氳嚦鍙互浣跨敤tmp鍘繪帀鍏朵腑鐨勫驚鐜傚湪C++涓紝榪欑被浠誨姟鐨勫疄鐜版柟娉曪紝瀹屽叏鐪嬬▼搴忓憳鐨勬兂璞″姏浜嗐?)


]]>
GP鎶鏈殑灞曟湜鈥斺擟--http://www.shnenglu.com/longshanks/archive/2008/08/02/57858.htmllongshankslongshanksSat, 02 Aug 2008 12:57:00 GMThttp://www.shnenglu.com/longshanks/archive/2008/08/02/57858.htmlhttp://www.shnenglu.com/longshanks/comments/57858.htmlhttp://www.shnenglu.com/longshanks/archive/2008/08/02/57858.html#Feedback14http://www.shnenglu.com/longshanks/comments/commentRss/57858.htmlhttp://www.shnenglu.com/longshanks/services/trackbacks/57858.htmlGP鎶鏈殑灞曟湜鈥斺擟--
鑾崕鏋?br>

    C++鐨勫鏉傛槸鍏鐨勶紝灝界鎴戣涓哄湪浜虹被鐨勮仾鏄庢櫤鎱т箣涓嬶紝榪欑偣澶嶆潅鍘嬫牴鍎跨畻涓嶄笂浠涔堛備笉榪囨垜寰楁壙璁わ紝瀵逛簬涓鑸殑搴旂敤鑰岃█錛孋++瀵圭▼搴忓憳浜х敓鐨勫帇鍔涜繕鏄笉 灝忕殑銆傛瘯绔熺幇鍦ㄦ湁鏇村鏇村悎閫傜殑閫夋嫨銆備粎浠呮壙璁ゅ鏉傦紝榪欐病鏈変粈涔堟剰涔夈傛垜涓嶆椂鍦頒駭鐢熶竴涓康澶達細鏈変粈涔堝姙娉曟棦淇濈暀C++鐨勪紭鐐癸紝鑰屾秷闄ゅ畠鐨勭己鐐瑰拰澶嶆潅銆傛垜鐭ラ亾 D璇█鍦ㄥ仛榪欐牱鐨勪簨鎯呫備絾鏄紝D鏇村鍦版槸鍦ㄥ氨浜嬭浜嬪湴娑堥櫎C++鐨勭己闄鳳紝鑰屾病鏈夊湪鏍規湰涓婃秷闄ょ己闄峰拰澶嶆潅鎬с?br id="n4.f">    涓鑸岃█錛屼竴鏍蜂笢瑗垮鏉備簡錛屽熀鏈笂閮芥槸鍥犱負涓滆タ澶銆傚緢鏄劇劧錛孋++鐨勮璦鐗規у湪浼楀璇█涓槸鏁頒竴鏁頒簩鐨勩備簬鏄紝鎴戜究鎯沖埌鎴栬鎶奀++鍙樻垚“C--”錛屽彲浠ユ不濂紺++鐨勫鏉備箣鐥呫傚湪鎺㈣榪欎釜闂涔嬪墠錛岃鎴戜滑鍏堜粠C鍑哄彂錛岀湅鐪婥++涓轟綍濡傛澶嶆潅銆?br id="nt0i">

C鍜孋++

    灝界瀛樺湪榪欐牱閭f牱鐨勪笉瓚籌紝姣斿non-lalr鐨勮娉曘侀殣寮忕殑鎸囬拡綾誨瀷杞崲絳夛紝浣咰璇█鐨勮璁″摬瀛﹀嵈鏄凍澶熺粡鍏哥殑銆侰璇█鏈変竴涓潪姝e紡鐨勫垎綾伙紝璁や負瀹冩棦闈?a title="姹囩紪" id="rkk6">姹囩紪榪欐牱鐨?a title="浣庣駭璇█" id="zr4u">浣庣駭璇█錛屼篃闈?a title="Pascal" id="xrbx">Pascal閭f牱鐨?a title="楂樼駭璇█" id="ncnx">楂樼駭璇█錛? 鑰屽簲璇ョ畻浣滀腑綰ц璦錛屼粙浜庡叾浠栦袱綾昏璦涔嬮棿銆傝繖縐嶅垎綾繪伆濡傚叾鍒嗗湴鐐瑰嚭浜咰璇█鐨勭壒鐐瑰拰鐞嗗康錛氫互楂樼駭璇█璇硶褰㈠紡鎵胯澆浜嗕綆綰ц璦鐨勭紪紼嬫ā鍨嬨備綆綰ц璦鐨勭壒鐐? 鏄彲浠ョ洿鎺ュ湴鎻忚堪紜歡緋葷粺鐨勭粨鏋勩侰鍒欑戶鎵夸簡榪欎釜鐗圭偣銆侰璇█鐩磋鍦板弽鏄犱簡紜歡鐨勯昏緫鏋勯狅紝姣斿鏁扮粍鏄唴瀛樺潡錛屽彲浠ョ瓑浠蜂簬鎸囬拡銆傚湪C璇█涓紝鎴戜滑鍙互鍑犱箮 鐩存帴鐪嬪埌紜歡鐨勬瀯閫狅紝騫朵笖鍔犱互鎿嶄綔銆傝繖浜涚壒鎬у浜庡簳灞傚紑鍙戣嚦鍏抽噸瑕併?br id="a8ed">    鐒惰岋紝C鐨勮繖縐嶇洿瑙傜畝媧佺殑妯″瀷榪囦簬搴曞眰鍜岀悙紕庯紝涓嶅埄浜庡簲鐢ㄥ湪閭d簺鏋勯犲鏉傘佸彉鍖栧鏍風殑搴旂敤涓傞拡瀵笴鐨勮繖浜涘急鐐癸紝Bjarne Stroustrup鍐沖績鍒╃敤OOP鎶鏈C璇█榪涜鏀歸狅紝浠庤屼績浣夸簡C++鐨勮癁鐢熴侰++鍏ㄩ潰錛堝嚑涔?00%錛夊湴鍏煎C錛岃瘯鍥句互姝ゅ湪涓嶆崯澶盋璇█鐨勭洿瑙? 鍜岀畝媧佺殑鎯呭喌涓嬶紝鍚屾椂鍏峰鏇村己鐨勮蔣浠跺伐紼嬬壒鎬э紝浣垮叾鍏峰寮鍙戝ぇ鍨嬪鏉傜郴緇熺殑浼樺娍銆傝繖涓洰鏍?#8220;鍑犱箮”杈懼埌浜嗭紝浣嗘槸浠d環棰囦負鍙銆?br id="dyop">    鍦ㄧ粡鍘嗕簡80銆?0騫翠唬鐨勮緣鐓屼箣鍚庯紝C++鐨勫簲鐢ㄩ鍩熷紑濮嬮姝ャ備竴鏂歸潰錛屽湪搴曞眰搴旂敤鏂歸潰錛孋++鐨勫緢澶氱壒鎬ц璁や負鏄浣欑殑銆傚鏋滀笉浣跨敤榪欎簺鐗規э紝閭d箞 C++鍒欏悓C娌℃湁浠涔堝樊鍒傜浉鍙嶈繖浜涚壒鎬х殑浣跨敤錛屽寮鍙戝洟闃熺殑鏁翠綋鑳藉姏鎻愬嚭浜嗘洿楂樼殑瑕佹眰銆傚洜鑰岋紝鍦ㄦ渶搴曞眰錛屽緢澶氫漢鏀懼純浜咰++鑰屽洖褰掍簡C錛屽洜涓洪偅浜涢珮綰х壒 鎬у茍鏈甫鏉ュ緢澶氬府鍔╋紝鍙嶈屼駭鐢熶簡寰堝璐熸媴銆傚彟涓鏂歸潰錛屽湪楂樺眰寮鍙戜腑錛屼笟鍔¢昏緫鍜岀晫闈篃鏃犻渶閭d箞澶氬簳灞傜殑鐗規у拰鑻涘埢鐨勬ц兘瑕佹眰錛屾洿澶氱畝鍗曟柟渚褲佷笂鎵嬪鏄撶殑璇? 璦鐩告瘮C++鏇村姞閫傚悎銆侰++鐨勫簲鐢ㄨ鍘嬬緝鍦ㄤ腑闂村眰錛岄殢鐫涓氱晫緋葷粺綰у紑鍙戠殑涓嶆柇涓撲笟鍖栵紝C++鐨勪嬌鐢ㄨ妯′篃浼氳秺鏉ヨ秺灝忋傦紙褰撶劧錛屽畠鎵寮鍙戠殑搴旂敤寰寰閮芥槸鍏? 閿х殑錛屽茍涓旀槸娌℃湁閫夋嫨浣欏湴鐨勶級銆傚疄闄呬笂錛孋++鍦ㄨ繖涓眰闈篃騫墮潪瀹岀編鐨勫伐鍏楓傜洰鍓嶆棤娉曞彇浠f槸鍥犱負娌℃湁鐩稿悓綰у埆鐨勬浛浠e搧銆侱鎴栬鏄釜寮烘湁鍔涚殑绔炰簤鑰咃紝浣嗕竴 鏂歸潰鍑轟簬鍘嗗彶閬楃暀浠g爜鐨勮妯″拰搴旂敤鎯э紝鍙︿竴鏂歸潰D涔熷茍鏈畬鍏ㄨВ鍐矯++闈復鐨勫鏉傛ч棶棰橈紝D涔熷緢闅懼湪鍙鐨勫皢鏉ュ彇浠++銆?br id="mof4">    瀹為檯涓婏紝C++鐨勮繖縐嶅按灝湴浣嶆湁鐫鏇存繁灞傛鐨勫師鍥犮侰++鐨勬湰鎰忔槸鍦ㄤ繚鐣機鐨勫簳灞傜壒鎬у熀紜涓婏紝澧炲姞鏇村ソ鐨勮蔣浠跺伐紼嬬壒鎬с備絾鏄紝C++浜嬪疄涓婂茍鏈湡姝f剰涔変笂 鍦頒繚鐣機鐨勫簳灞傜壒鎬с傚洖欏句竴涓婥鐨勮璁$悊蹇碘斺旂洿瑙傝岀畝媧佸湴鍙嶆槧搴曞眰紜歡鐨勭壒鎬с侰++閫氳繃鍏煎C鑾峰緱浜嗚繖縐嶈兘鍔涖備絾鏄繖閲屾湁涓棶棰橈紝濡傛灉鎴戣鑾峰緱C鐨勮繖 縐嶇畝鍗曠洿瑙傛э紝灝卞繀欏繪斁寮僀++涓殑寰堝楂樼駭鐗規с傝繖閲屾渶鏄庢樉鐨勪竴涓緥瀛愪究鏄痯od錛?a title="plain old data" id="ogl:">plain old data錛夈?br id="rz7y">    鍦–涓帇鏍規病鏈塸od鐨勬蹇碉紝鍥犱負鎵鏈夌殑瀵硅薄閮芥槸pod銆備絾鏄紝C++涓湁浜唒od銆傚洜涓篊++鐨勫璞″彲鑳戒笉鏄竴涓猵od錛岄偅涔堟垜浠究鏃犳硶璞″湪C褰撲腑閭f牱 鑾峰緱鐩磋綆媧佺殑鍐呭瓨妯″瀷銆傚浜巔od錛屾垜浠彲浠ラ氳繃瀵硅薄鐨勫熀鍦板潃鍜屾暟鎹垚鍛樼殑鍋忕Щ閲忚幏寰楁暟鎹垚鍛樼殑鍦板潃錛屾垨鑰呭弽榪囨潵銆備絾鍦ㄩ潪pod瀵硅薄涓紝鍗存棤娉曡繖涔堝仛銆? 鍥犱負C++鐨勬爣鍑嗗茍鏈闈瀙od瀵硅薄鐨勫唴瀛樺竷灞浣滃嚭瀹氫箟錛屽洜鑰屽浜庝笉鍚岀殑緙栬瘧鍣紝瀵硅薄甯冨眬鏄笉鍚岀殑銆傝屽湪C涓紝浠呬粎浼氬洜涓哄簳灞傜‖浠剁郴緇熺殑宸紓鑰屽獎鍝嶅璞″竷 灞銆?br id="sbek">    榪欎釜闂閫氬父騫朵笉鏄捐屾槗瑙併備絾鍦ㄥ緢澶氭儏鍐典笅涓烘垜浠埗閫犱簡涓嶅皬鐨勯殰紕嶃傛瘮濡傦紝瀵硅薄鐨勫簭鍒楀寲錛氭垜浠瘯鍥懼皢涓涓璞′互浜岃繘鍒舵祦鐨勫艦寮忎繚瀛樺湪紓佺洏涓佹暟鎹簱涓紝鎴? 鑰呭湪緗戜笂浼犺緭錛屽鏋滄槸pod錛屽垯鐩存帴灝嗗璞′粠鍩哄湴鍧寮濮嬶紝鎸夊璞$殑澶у皬澶嶅埗鍑烘潵錛屾垨浼犺緭錛屾垨瀛樺偍錛岄潪甯告柟渚褲備絾濡傛灉鏄潪pod錛岀敱浜庡璞$殑涓嶅悓閮ㄥ垎鍙兘瀛? 鍦ㄤ簬涓嶅悓鐨勫湴鏂癸紝鍥犺屾棤娉曠洿鎺ュ鍒訛紝鍙兘閫氳繃鎵嬪伐鍔犲叆搴忓垪鍖栨搷浣滀唬鐮侊紝渚靛叆寮忓湴璇誨彇瀵硅薄鏁版嵁銆傦紙榪欎釜闂涓嶄粎浠呭瓨鍦ㄤ簬C++錛屽叾浠栬璦錛屽java銆丆# 絳夐兘瀛樺湪銆傚彧鏄畠浠病鏈夊緢寮虹儓鐨勬ц兘瑕佹眰錛屽彲浠ヤ嬌鐢ㄨ濡俽eflect絳夋墜孌靛姞浠ュ鐞嗭級銆傚悓鏍風殑闂涔熷瓨鍦ㄤ簬璇稿hash鍊肩殑璁$畻絳夋柟闈€傝繖瀵瑰緢澶氬紑鍙戝伐 浣滈犳垚涓嶅皬鐨勫獎鍝嶏紝涓嶄粎浠呭湪搴曞眰錛屼篃鍖呮嫭寰堝楂樺眰鐨勫簲鐢ㄣ?br id="tnen">    絀跺叾鍘熷洜錛孋++浠呬粎璇曞浘閫氳繃鏈烘鍦板皢C鐨勫簳灞傜壒鎬у拰OOP絳夐珮灞傜壒鎬ф販鍚堝湪涓璧鳳紝鎰忓浘杈懼埌涓ゆ柟鍏奸【鐨勭洰鐨勩備絾鏄紝浜嬩笌鎰胯繚錛?a title="OOP" id="s_.7">OOP鐨? 寮曞叆瀹為檯涓婁嬌寰桟鐨勭紪紼嬫ā鍨嬪拰鍏朵粬鏇撮珮綰х殑鎶借薄妯″瀷鏃犳硶鍏煎銆傚湪浣跨敤C++鐨勮繃紼嬩腑錛岃涔堝彧浣跨敤C鐨勭壒鎬э紝鑰屾棤娉曡幏寰椾唬鐮佹娊璞″拰瀹夊叏鎬ф柟闈㈢殑濂藉錛岃涔堟斁 寮僀鐨勭洿瑙傜畝媧侊紝鑰岃幏寰楅珮灞傛鐨勬娊璞¤兘鍔涖傚弽鑰岋紝鐢變簬C鍜孫OP緙栫▼妯″瀷涔嬮棿鐨勭煕鐩撅紝澶уぇ澧炲姞浜嗚璦鐨勫鏉傛у拰緙洪櫡鏁般?br id="fqu1">

鑸嶅純

    浣嗘槸錛屾垜浠彲浠ョ湅鍒板湪C++涓紝騫墮潪鎵鏈夌殑楂樼駭鐗規ч兘涓嶤鐨勫簳灞傜壒鎬х浉鍐茬獊銆傚緢澶氫嬌鐢–鑰屼笉鍠滄C++鐨勪漢閮借〃紺鴻繃浠栦滑鍘熸剰鎺ュ彈OB錛屼篃灝辨槸浠呬粎浣跨敤灝佽 銆傚浜?a title="RAII" id="typ4">RAII錛屽熀鏈笂涔熸寔鑲畾鐨勬佸害銆傛垨璁鎬篃浼氭帴鍙?a title="緇ф壙" id="ew-b">緇ф壙錛屼絾涔熻〃闇插嚭瀵硅繖縐嶆妧鏈甫鏉ョ殑澶嶆潅鎬х殑鎷呭績銆?a title="鍔ㄥ鎬? id="zmfi">鍔ㄥ鎬?/a>鏄槑鏄懼彈鍒版帓鏂ョ殑鎶鏈傛樉鐒惰繖鏄洜涓哄姩澶氭佺牬鍧忎簡C鐨勭紪紼嬫ā鍨嬶紝浣垮緱寰堝鏈潵綆鍗曠殑闂澶嶆潅鍖栥備笉鏄畠涓嶅ソ錛屾垨鑰呮病鐢紝鏄畠鎵撶牬浜嗗お澶氱殑涓滆タ銆?br id="hbzx">    鍥犺岋紝鎴戜滑璁炬兂涓涓嬶紝濡傛灉鎴戜滑鍘婚櫎鍔ㄥ鎬佺壒鎬э紝閭d箞鏄惁浼氭秷闄よ繖綾婚棶棰樺憿錛熸垜浠竴姝ユ鐪嬨?br id="pa4y">    鍔ㄥ鎬佺殑涓涓熀鏈敮鎾戞妧鏈槸铏氬嚱鏁?/a>銆傚湪浣跨敤铏氬嚱鏁扮殑鎯呭喌涓嬶紝綾葷殑姣忎竴嬈$戶鎵塊兘浼氫駭鐢熶竴涓?a title="铏氬嚱鏁拌〃" id="i67i">铏氬嚱鏁拌〃錛坴table錛夛紝鍏朵腑瀛樻斁鐨勬槸鎸囧悜铏氬嚱鏁扮殑鎸囬拡銆傝繖浜涜櫄鍑芥暟琛ㄥ繀欏誨瓨鏀懼湪瀵硅薄浣撲腑錛屼篃灝辨槸鍜屽璞$殑鏁版嵁瀛樻斁鍦ㄤ竴璧鳳紙鑷沖皯瑕佸叧鑱斿湪涓璧鳳級銆傚洜鑰岋紝瀵硅薄鍦ㄥ唴瀛橀噷騫朵笉鏄互榪炵畫鐨勬柟寮忓瓨鏀撅紝鑰岃鍒嗗壊鎴愪笉鍚岀殑閮ㄥ垎錛岀敋鑷寵韓棣栧紓澶勶紙璇﹁銆?a title="Inside c++ object model" id="zduz">Inside C++ Object Model銆嬶級銆傝繖渚塊犳垚浜嗗墠闈㈡墍璇寸殑闈瀙od楹葷儲銆備竴鏃︽斁寮冭櫄鍑芥暟鍜寁table錛屽璞$殑鍐呭瓨甯冨眬涓紝渚夸笉浼氭湁涓滆タ灝嗗璞″垎鍓插紑銆傛墍鏈夌殑瀵硅薄鐨勬暟鎹瓨鍌ㄩ兘鏄繛緇殑錛屽洜鑰岄兘鏄痯od銆傚湪榪欎竴鐐逛笂錛岄氳繃鍘婚櫎vtable錛屼嬌寰楄璦鍥炲綊浜咰鐨勭洿瑙傚拰綆鍗曘?br id="lcim">    鍔ㄥ鎬佺殑鍐呭褰撶劧涓嶄粎浠呮槸涓涓櫄鍑芥暟錛屽彟涓涓噸瑕佺殑鍩虹煶鏄戶鎵褲傚綋鐒訛紝鎴戜滑騫朵笉鎵撶畻鏀懼純緇ф壙錛屽洜涓哄畠騫朵笉鐩存帴鐮村潖C鐨勭洿瑙傛у拰綆媧佹с備笉鍚屼簬铏氬嚱鏁幫紝緇ф壙 涓嶆槸瀹屽叏涓轟簡鍔ㄥ鎬佽岀敓鐨勩傜戶鎵挎渶鍒濈殑鐢ㄩ斿湪浜庝唬鐮佸鐢ㄣ傚綋瀹冭璧嬩簣浜嗗鎬佸惈涔夊悗錛屾墠浼氭垚涓哄姩澶氭佺殑鍩虹銆備互涓嬬殑浠g爜鍙互鏈変袱縐嶄笉鍚岀殑瑙h錛?br id="m_a7">    class B : public A {};
    浠?a title="浠g爜澶嶇敤" id="ba2m">浠g爜澶嶇敤鐨勮搴︽潵鐪嬶紝B緇ф壙鑷狝錛岃〃紺烘垜鎵撶畻璁〣澶嶇敤A鐨勬墍鏈変唬鐮侊紝騫朵笖澧炲姞鍏朵粬鍔熻兘銆傝屼粠澶氭佺殑瑙掑害鏉ョ湅錛孊鏄竴涓狝鐨勬墿灞曪紝B鍜孉涔嬮棿瀛樺湪is-a鐨? 鍏崇郴銆傦紙B鏄竴涓狝錛夈備袱鑰呮槸绔欏湪涓嶅悓灞傞潰鐪嬪緟鍚屼竴涓棶棰樸備唬鐮佸鐢紝浠h〃浜嗙紪鐮佺殑瑙傜偣錛岃屽鎬侊紝鍒欎唬琛ㄤ簡涓氬姟閫昏緫鐨勮鐐廣備絾鏄紝涓よ呭茍闈炲疄璐ㄤ笂鐨勪竴鍥? 浜嬨傚湪寰堝鎯呭喌涓嬶紝鍩虹被寰寰浣滀負緇ф壙綾葷殑鏌愮浠h〃錛屾垨鑰呮帴鍙o紝榪欏湪緙栫爜瑙掑害鏉ョ湅騫舵病鏈夊絳夌殑鐞嗚В銆傝岃繖縐嶆帴鍙d綔鐢紝鍒欐槸鍔ㄥ鎬佺殑鍩虹銆傚姩澶氭侀氳繃涓嶅悓鐨勭被 緇ф壙鑷悓涓涓熀綾伙紝浣垮畠浠嫢鏈夊叡鍚岀殑鎺ュ彛錛屼粠鑰屽彲浠ヤ嬌鐢ㄧ粺涓鐨勫艦寮忓姞浠ユ搷浣溿備綔涓轟竴涓瀬绔紝interface錛堟垨鑰呰鎶借薄鍩虹被錛夛紝浠呬粎鎷ユ湁鎺ュ彛鍑芥暟錛堝嵆vtable錛夎屼笉鍖呭惈浠諱綍鏁版嵁鎴愬憳銆傝繖鏄函綺圭殑鎺ュ彛銆?br id="g88s">    鐒惰岋紝榪欓噷瀛樺湪涓涓己闄楓備竴涓帴鍙f墍浠h〃鐨勬槸涓緇勭被錛屽畠灝嗘垚涓鴻繖涓緇勭被鍚屽鐣屼氦浜掔殑鍏卞悓鐣岄潰銆備絾鏄紝浣跨敤鍩虹被銆佹垨鑰呮娊璞″熀綾諱綔涓烘帴鍙o紝瀹炶川涓婃槸鍦ㄤ嬌鐢ㄤ竴涓? 綾誨瀷鏉ヤ唬琛ㄤ竴緇勭被鍨嬨傛墦涓瘮鏂癸紝涓緹や漢鍑戝湪涓璧峰嚭鍘繪梾娓革紝鎴戜滑縐頒粬浠繖緹や漢涓?#8220;鏃呰鍥?#8221;銆傛垜浠煡閬撴梾琛屽洟涓嶆槸涓涓漢錛岃屾槸涓涓笉鍚屼簬“浜?#8221;鐨勬蹇點傚姩澶氭? 閲岀殑鎺ュ彛鐩稿綋浜庢妸涓涓梾琛屽洟褰撲綔涓涓漢鏉ョ湅寰呫傚敖綆¤繖鍙槸閫昏緫涓婄殑錛屾垨璁鎬竴涓梾琛屽洟鐨勫緢澶氳涓哄拰涓涓漢棰囦負鐩鎬技銆備絾鏄牴鏈笂鑰岃█錛屼袱鑰呮瘯绔熶笉鏄浉鍚屽眰嬈$殑 姒傚康銆傝繖鏍風殑澶勭悊鏂規硶寰寰浼氬甫鏉ヤ簡寰堝寮婄銆?br id="ddpi">    涓轟簡浣跨戶鎵胯璧嬩簣鐨勮繖閲嶄綔鐢ㄥ彂鎸ヤ綔鐢紝榪橀渶瑕佷竴欏歸潪甯稿叧閿殑澶勭悊錛氱被鍨嬭漿鎹€傝鐪嬩互涓嬩唬鐮侊細
    void func(A* a);
    B b;
    func(&b);
    鏈鍚庤繖琛屼唬鐮佹柦琛屼簡鍔ㄥ鎬侊紝濡傛灉B override浜咥鐨勮櫄鍑芥暟鐨勮瘽銆傚緢鏄劇劧錛屽鏋滀弗鏍煎湴浠庡己綾誨瀷瑙掑害鑰岃█錛?amp;b鏄笉搴斿綋浣滀負func鐨勫疄鍙傦紝鍥犱負涓よ呯被鍨嬩笉鍖歸厤銆備絾鏄鏋滄嫆緇濇帴 鍙?amp;b浣滀負瀹炲弬錛岄偅涔堝姩澶氭佸皢鏃犳硶榪涜涓嬪幓銆傚洜姝わ紝鎴戜滑鏀懼浜嗙被鍨嬭漿鎹㈢殑闄愬埗錛氬厑璁哥戶鎵跨被瀵硅薄鐨勫紩鐢ㄦ垨鎸囬拡闅愬紡鍦拌漿鎹㈡垚鍩虹被鐨勫紩鐢ㄦ垨鎸囬拡銆傝繖鏍鳳紝 褰㈠func(&b);渚垮彲浠ラ『鐞嗘垚绔犲湴鎴愪負鍚堟硶鐨勪唬鐮併?br id="hcgc">    鐒惰岋紝榪欎篃鏄湁浠d環鐨勶細
    B ba[5];
    func(ba);
    鍚庨潰榪欒鍑芥暟璋冪敤瀹為檯涓婃槸涓涓瀬鍏跺嵄闄╃殑閿欒銆傚亣璁懼湪func()涓紝灝嗗艦鍙俛浣滀負涓涓被鍨婣鐨勬暟緇勫寰咃紝閭d箞褰撴垜浠嬌鐢╞a浣滀負瀹炲弬璋冪敤func()鐨? 鏃跺欙紝浼氬皢ba浣滀負A鐨? 鏁扮粍澶勭悊銆傛垜浠煡閬擄紝鏁扮粍鍐呴儴鍏冪礌鏄揣鎸ㄧ潃鐨勶紝絎簩涓厓绱犵殑浣嶇疆鏄涓涓厓绱犵殑鍩哄潃鍔犱笂鍏冪礌鐨勫昂瀵革紝浠ユ綾繪帹銆傚鏋滀紶閫掕繘鏉ョ殑瀵硅薄鏁扮粍鏄疊綾誨瀷鐨勶紝鑰岃浣? 涓篈綾誨瀷澶勭悊錛岄偅涔堜袱鑰呯殑鍏冪礌浣嶇疆灝嗗彲鑳戒笉鍚屾銆傚敖綆緇ф壙鑷狝錛屼絾鏄疊鐨勫昂瀵稿緢鏈夊彲鑳藉ぇ浜嶢錛岄偅涔堜粠絎簩涓厓绱犺搗錛宎[1]鐨勫湴鍧騫墮潪ba[1]鐨勫湴 鍧銆備簬鏄紝褰撴垜浠互a[1]璁塊棶ba鏃訛紝瀹為檯涓婂緢鍙兘鍦╞a[0]鐨勫唴閮ㄦ煇涓綅緗鍙栵紝鑰宖unc()鐨勪唬鐮佽繕浠ヤ負鏄湪鎿嶄綔ba[1]銆傝繖渚挎槸C++涓殑 涓涓噸瑕佺殑闄烽槺鈥斺斿璞″垏鍓層傝繖縐嶉敊璇浉褰撻殣钄斤紝鍗遍櫓鎬ф瀬澶с?br id="nl9g">    鐢變簬C++璇曞浘淇濈暀C鐨勭紪紼嬫ā鍨嬶紝鍥犺屼繚鐣欎簡鎸囬拡-鏁扮粍鐨勭瓑浠鋒с傝繖縐嶇瓑浠鋒т綋鐜頒簡鏁扮粍鐨勬湰璐ㄣ傝繖鍦–涓槸涓欏瑰埄鍣紝騫舵棤浠諱綍闂銆備絾鍦–++涓紝鐢變簬瀛? 鍦ㄤ簡緇ф壙錛屼互鍙婄戶鎵跨被鐨勯殣寮忕被鍨嬭漿鎹紝浣垮緱榪欑鍘熸湰婊嬭ˉ鐨勭壒鎬ф垚涓轟簡涓鍓傛瘨鑽傛崲鍙ヨ瘽璇達紝C++鎵寮曞叆鐨勫姩澶氭佺牬鍧忎簡C鐨勭洿瑙傛с?br id="movc">

鑸嶅純涔嬪悗

    浠庝笂闈㈢殑鍒嗘瀽鏉ョ湅錛屽姩澶氭佸悓C鐨勭紪紼嬫ā鍨嬫槸涓嶇浉瀹圭殑銆傚洜鑰屽鏋滃笇鏈涘緱鍒癈鐨勭洿瑙傛э紝騫朵笖娑堥櫎C++鐨勭己闄鳳紝蹇呴』鏀懼純鍔ㄥ鎬佽繖涓壒鎬с傜幇鍦ㄦ潵鐪嬬湅鏀懼純涔嬪悗灝嗕細鎬庢牱銆?br id="vfq0">    涓鏃︽斁寮冧簡鍔ㄥ鎬侊紝涔熷氨鏀懼純浜嗚櫄鍑芥暟鍜寁table銆傛鏃訛紝鎵鏈夌殑瀵硅薄閮芥槸pod浜嗐傞偅涔堥褰撳叾鍐茬殑濂藉錛屽氨鏄彲浠ヨ繘琛岄潪渚靛叆鐨勫簭鍒楀寲銆乭ash璁$畻絳夌瓑 鎿嶄綔銆傜敱浜庡璞¤偗瀹氭槸榪炵畫鍒嗗竷鐨勶紝鍙互鐩存帴鍦板皢瀵硅薄鍙栧嚭榪涜緙栫爜銆佸瓨鍌ㄣ佽綆楀拰浼犺緭錛岃屾棤闇浜嗚В瀵硅薄鍐呴儴鐨勬暟鎹粨鏋勫拰鍚箟銆傚彟澶栦竴涓噸瑕佺殑闂涔熶細寰楀埌瑙? 鍐籌紝榪欏氨鏄疉BI銆傚湪C涓粺涓鐨凙BI寰堣嚜鐒跺湴瀛樺湪浜庤璦涓傛垜浠彲浠ュ緢瀹規槗鍦扮敤link灝嗕袱涓笉鍚岀紪璇戝櫒緙栬瘧鐨勬ā鍧楄繛鎺ヨ搗鏉ワ紝鑰屼笉浼氬彂鐢熼棶棰樸備絾 鏄紝C++涓仛涓嶅埌錛岄櫎闈炰笉鍐嶄嬌鐢ㄧ被鑰屼嬌鐢ㄧ函C銆傜洰鍓岰++榪樻病鏈夌粺涓鐨凙BI錛屽嵆渚挎爣鍑嗗鍛樹細鏈夋剰寤虹珛榪欐牱鐨勮鑼冿紝瀹炵幇璧鋒潵涔熺粷闈炴槗浜嬨備絾鏄紝濡傛灉鏀懼純 鍔ㄥ鎬佷箣鍚庯紝瀵硅薄鐨勫竷灞渚垮洖褰掑埌C鐨勫艦鎬侊紝浠庤屼嬌寰桝BI涓嶅啀鎴愪負涓涓棶棰樸?br id="v898">    鍙︿竴鏂歸潰錛岄殢鐫鍔ㄥ鎬佺殑鍙栨秷錛岄偅涔堢戶鎵跨殑浣滅敤琚粎浠呭眬闄愪簬浠g爜澶嶇敤錛屼笉鍐嶅叿鏈夋瀯閫犳帴鍙g殑浣滅敤銆傛垜浠墠闈㈠凡緇忕湅鍒幫紝緇ф壙綾誨悜鍩虹被鐨勯殣寮忚漿鎹紝鏄負浜嗕嬌鍩虹被鑳? 澶熼『鍒╁湴鎴愪負緇ф壙綾葷殑鎺ュ彛銆傛棦鐒舵斁寮冧簡鍔ㄥ鎬侊紝閭d箞涔熷氨鏃犻渶鍩虹被鍐嶆壙鎷呮帴鍙g殑浠誨姟銆傞偅涔堢敱緇ф壙綾誨悜鍩虹被鐨勯殣寮忕被鍨嬭漿鎹篃鍙互琚姝細
    void func(A* a);
    B b;
    func(&b);  //緙栬瘧閿欒錛岀被鍨嬩笉鍖歸厤
    榪涜屽璞″垏鍓蹭篃涓嶄細鍙戠敓錛?br id="g8k2">    B ba[5];
    func(ba); //緙栬瘧閿欒錛岀被鍨嬩笉鍖歸厤
    灝界鏍規嵁鏁扮粍-鎸囬拡鐨勭瓑浠鋒э紝ba鍙互琚殣寮忓湴杞崲涓築*錛屼絾鏄疊*涓嶅啀鑳藉闅愬紡鍦拌漿鎹負A*錛屼粠鑰岄伩鍏嶄簡瀵硅薄鐨勫垏鍓層?br id="p.36">    闂鏄紝濡傛綆鍗曞湴灝嗗姩澶氭佹斁寮冩帀錛屽氨濡傚悓灝嗘按鍜屽瀛愪竴璧鋒臣鎺夐偅鏍鳳紝瀹為檯涓婃斁寮冧簡鍔ㄥ鎬佸甫鏉ョ殑濂藉銆傚疄闄呬笂騫墮潪濡傛銆傛垜浠斁寮冨姩澶氭佽繖涓壒鎬э紝浣嗗茍涓嶆墦綆楁斁寮冨畠鎵鍏鋒湁鐨勫姛鑳斤紝鑰屾槸鐢ㄥ彟涓縐嶆妧鏈姞浠ユ浛浠c傝繖渚挎槸runtime concept錛?a title="榪欓噷" id="rcy-">榪欓噷鍜?a title="榪欓噷" id="s1fo">榪欓噷錛夈?br id="ww1_">    涓嶅悓浜庝互綾誨瀷涓哄熀紜鐨刬nterface錛?a title="concept" id="y8et">concept鏄嫭绔嬩簬綾誨瀷鐨勭郴緇熴俢oncept鐢熸潵渚挎槸涓轟簡鎻忚堪涓緇勭被鍨嬶紝鍥犺屾槸鎺ュ彛鏈鐞嗘兂鐨勫疄鐜版墜孌點傚綋concept runtime鍖栦箣鍚庯紝渚垮叿鏈変簡涓庡姩澶氭佺浉鍚岀殑鍔熻兘錛堝緢澶氭柟闈㈣繕鏈夋墍瓚呰秺錛夈?br id="cx1s">    runtime concept鍚屾牱闇瑕佺被浼紇table鐨勫嚱鏁板垎媧捐〃錛屼絾鐢變簬瀹冧笉鏄被鍨嬶紝榪欎簺鍒嗘淳琛ㄦ棤闇瀛樻斁鍦ㄥ璞″唴閮紝鍙互鐙珛鏀劇疆錛堝彲浠ュ悓RTTI淇℃伅鏀懼湪涓璧鳳級錛? 騫朵笖鍙渶涓浠姐傛鏄熀浜庤繖涓壒鎬э紝鏂規墠淇濊瘉浜嗘墍鏈夊璞′緷鐒舵槸pod錛屼緷鐒惰兘澶熶繚璇佸璞″竷灞鐨勭洿瑙傛с?br id="w6r.">    鍚屾牱錛宺untime concept鎵挎媴浜嗘帴鍙g殑浠誨姟錛屼絾涓嶈薄鍔ㄥ鎬侀偅鏍蜂緷璧栦簬緇ф壙鍜岀浉搴旂殑闅愬紡綾誨瀷杞崲銆傦紙閫氳繃鑷姩鎴栨墜鍔ㄧ殑concept_map錛夈傚洜鑰岋紝鎴戜滑渚濇棫鍙互紱佹鍩轟簬緇ф壙鍏崇郴鐨勯殣寮忕被鍨嬭漿鎹紝浠庤岄槻姝㈠璞″垏鍓茬殑鎯呭喌銆?br id="xorp">    涓鏃︿嬌鐢╟oncept浣滀負澶氭佺殑瀹炵幇鎵嬫錛屽弽鍊掍績浣垮師鏈姩澶氭佺殑涓浜涢夯鐑﹀緱鍒版秷闄ゃ傚湪鍔ㄥ鎬佷腑錛屽繀欏繪寚瀹歷irtual鍑芥暟銆傚姝わ紝鍦ㄤ竴涓被涓細瀛樺湪涓? 縐嶄笉鍚屽艦鎬佺殑鍑芥暟錛屽疄鐜板姩澶氭佺殑铏氬嚱鏁幫紝鍜屾棤姝ゅ姛鑳界殑鏅氬嚱鏁般傚噯紜湴緇存姢榪欐牱涓ょ鍑芥暟錛岄鏈変簺闅懼害銆傝屼笖錛屽嚱鏁版槸铏氳繕鏄笉铏氾紝鐗墊秹鍒扮郴緇熺殑璁捐錛屽繀欏誨湪 鏈鍒濇瀯寤烘椂紜畾錛屽惁鍒欎互鍚庡緢闅句慨鏀廣備絾鍦ㄦ斁寮冨姩澶氭侊紝浣跨敤concept鐨勬儏鍐典笅錛屽彧瑕佷竴涓戶鎵跨被涓紝浣跨敤鐩稿悓鐨勭鍚嶈鐩栧熀綾諱腑鐨勫嚱鏁幫紝渚垮疄鐜頒簡澶氭併傚綋 榪涜concept_map錛屽嵆灝嗘帴鍙d笌綾葷粦瀹氭椂錛屽彧浼氳冭檻緇ф壙綾葷殑鍑芥暟錛岃屽拷鐣ュ熀綾諱腑琚鐩栫殑鍑芥暟銆備簬鏄紝鍙渶綆鍗曠殑瑕嗙洊錛屼究瀹炵幇浜嗗鎬佺殑鎺у埗銆傚浜庢槸 鍚﹀鎬佷竴涓嚱鏁幫紝鍗蟲槸鍚︽敼鍙樺熀綾誨嚱鏁扮殑琛屼負錛屽畬鍏ㄧ敱緇ф壙綾繪帶鍒訛紝鍦ㄥ垱寤哄熀綾繪椂涓嶅繀涓烘浼ょ銆傚叾緇撴灉灝辨槸錛屾垜浠棤闇鍦ㄧ郴緇熻璁$殑鏈鍒濅竴鍒誨氨鎿嶅績澶氭佺殑闂錛? 鑰屽彧闇鏍規嵁瀹炵幇鐨勯渶瑕侀殢鏃跺疄鐜般?br>

鍏朵粬

    瀛樺湪澶ч噺闅愬紡杞崲涔熸槸C++甯稿彈浜鴻療鐥呯殑涓涓柟闈紝錛堢壒鍒槸閭d簺Pascal緋葷殑紼嬪簭鍛橈級銆傞殣寮忚漿鎹㈢殑鐩殑鏄甫鏉ユ柟渚匡紝浣垮緱緙栫爜鏇村姞綆媧侊紝鍑忓皯鍐椾綑銆傚悓鏃朵篃浣垮緱涓浜涙妧宸у緱浠ユ柦琛屻備絾鏄紝闅愬紡杞崲鐨勫壇浣滅敤涔熼涓哄彲瑙傘傛瘮濡傦細
    void fun(short a);
    long a=1248;
    fun(a); //欏跺涓涓鍛?br id="q8u5">    榪欑杞崲瀛樺湪涓ら潰鎬э細涓鏂歸潰錛屽畠鍙兘鏄悎鐞嗙殑錛屽洜涓哄敖綆綾誨瀷long澶т簬short錛屼絾寰堝彲鑳藉瓨鏀劇潃short鍙綰崇殑鏁板鹼紱浣嗗彟涓鏂歸潰錛宎鐨勭‘瀛樺湪short鏃犳硶瀹圭撼鐨勫彲鑳芥э紝榪欎究浼氶犳垚涓涓潪甯擱殣钄界殑bug銆?br id="nxhy1">    C/C++瀵規鐨勭瓥鐣ユ槸鎶婇棶棰樻墧緇欑▼搴忓憳澶勭悊錛屽鏋滄湁bug閭f槸紼嬪簭鍛樼殑闂銆傝繖涔熺畻寰椾笂鍚堟儏鍚堢悊錛屾瘯绔熸湁鎵寰楀繀鏈夋墍澶憋紝涔熺鍚圕/C++鐨勪竴璐悊蹇點備絾 緇堢┒涓嶆槸鏈鐞嗘兂鐨勬柟寮忋備絾鏄鏋滆薄Pascal閭f牱灝嗙被鍨嬬寰楀緢姝伙紝閭d箞璇█鍙堜細澶卞幓鐏墊椿鎬э紝浣垮緱寮鍙戠殑澶嶆潅鎬у鍔犮?br id="c_mt">    濡傛灉璇曞浘紱佹闅愬紡綾誨瀷杞崲錛岄偅涔堜負浜嗙淮鎸佸嚱鏁頒嬌鐢ㄤ唬鐮佺殑綆媧佹э紝鍑芥暟蹇呴』瀵規墍鏈夌殑綾誨瀷鎵ц閲嶈澆銆傝繖澶уぇ澧炲姞浜嗗嚱鏁板疄鐜扮殑璐熸媴錛屽茍涓旈噸澶嶇殑浠g爜涓ラ噸榪濊儗浜?a title="DRY" id="b0w.">DRY鍘熷垯銆?br id="bmkt">    鐜板湪鎴栬瀛樺湪涓浜涢斿緞錛屼嬌寰楀湪緇存寔緇濆寮虹被鍨嬬殑鎯呭喌涓嬭幏寰楁墍甯屾湜鐨勭伒媧繪с傞挜鍖欏彲鑳戒緷鐒跺湪concept鎵嬩笂銆傝冭檻濡備笅鐨勪唬鐮侊細
    void fun(Integers a);
    long a=1248;
    fun(a);
    longlong b=7243218743012;
    fun(b);
    姝ゅ錛宖un()鏄竴涓嚱鏁幫紝瀹冪殑褰㈠弬鏄竴涓猚oncept錛屼唬琛ㄤ簡鎵鏈夌殑鏁村瀷銆傝繖鏍鳳紝榪欎釜鍑芥暟渚垮彲浠ユ帴鍙椾換浣曚竴縐嶆暣鍨嬶紙鎴栬呭叿鏈夋暣鍨嬭涓虹殑綾誨瀷錛夈傛垜浠? 鐩鎬俊錛屽湪涓鑸殑搴旂敤涓嬶紝浠諱綍鏁存暟閮芥湁瀹屽叏鐩稿悓鐨勮涓恒傚洜姝わ紝鎴戜滑渚垮彲浠ュ緢鏂逛究鍦頒嬌鐢↖ntegers榪欎釜鎺ュ彛鎵ц瀵規暣鏁扮殑鎿嶄綔錛岃屾棤闇鍏沖績鍒板簳鏄粈涔堟牱鐨? 鏁存暟銆?br id="u-s_">    濡傛錛屾垜浠究鍙互鍦ㄧ姝㈤殣寮忕被鍨嬭漿鎹紝涓嶄嬌鐢ㄥ嚱鏁伴噸杞界殑鎯呭喌涓嬶紝瀹屾垚榪欑鍑芥暟鐨勭紪鍐欍傚悓鏃跺彲浠ュ緱鍒版洿濂界殑綾誨瀷瀹夊叏鎬с?br id="g9tf">
    寮哄埗綾誨瀷杞崲鏄潪甯擱噸瑕佺殑鐗規э紝鐗瑰埆鏄湪搴曞眰寮鍙戞椂銆備絾涔熸槸鍙屽垉鍓戯紝寰寰寮曟潵寰堥殣钄界殑閿欒銆傚己鍒剁被鍨嬭漿鎹㈠緢澶氭儏鍐典笅鏄棤鐞嗙殑錛岄氬父閮芥槸杞歡鐨勮璁¢棶棰橀犳垚鐨勩備絾緇堢┒榪樻槸鏈変竴浜涙儏鍐碉紝闇瑕佸畠鏉ュ鐞嗐?br id="xhcm">    璁炬兂榪欐牱涓涓満鏅細涓や釜涓妯′竴鏍風殑綾誨瀷錛屼絾瀹冧滑鍒嗗睘涓嶅悓鐨勫嚱鏁般傦紙榪欑鎯呭艦灝界涓嶅瑙侊紝浣嗚繕鏄瓨鍦ㄧ殑銆傝繖寰寰鏄販涔辮璁$殑緇撴灉銆傚綋鐒朵篃鏈夊悎鐞嗙殑鎯呭喌錛屾瘮濡? 鏉ヨ嚜涓や釜涓嶅悓搴撶殑綾誨瀷錛夈傛垜鐜板湪闇瑕佸啓涓涓嚱鏁幫紝鑳藉鍚屾椂浣跨敤榪欎袱涓被鍨嬨傛瘮杈冨畨鍏ㄤ竴浜涚殑錛屽彲浠ョ敤鍑芥暟閲嶈澆銆備絾鏄袱涓噸杞界殑鍑芥暟浠g爜鏄竴鏍風殑錛屽吀鍨嬬殑鍐椾綑 浠g爜銆傚綋鐒朵篃鍙互閽堝鍏朵腑涓涓粨鏋勭紪鍐欎唬鐮侊紝鐒跺悗鍦ㄤ嬌鐢ㄦ椂錛屽鍙︿竴涓粨鏋勭殑瀹炰緥鎵ц寮哄埗綾誨瀷杞崲銆備絾鏄紝寮哄埗綾誨瀷杞崲姣曠珶涓嶆槸浠跺ソ浜嬨傚洜姝わ紝鎴戜滑涔熷彲浠ユ瀯 閫犱竴涓猚oncept錛岃瀹冩弿榪拌繖涓や釜綾誨瀷銆傜劧鍚庡湪緙栧啓鍑芥暟鏃朵嬌鐢ㄨ繖涓猚oncept錛屽綋榪欎袱涓被鍨嬮兘涓巆oncept緇戝畾鍚庯紝渚垮彲浠ョ洿鎺ヤ嬌鐢ㄨ繖涓や釜綾? 鍨嬶紝鑰屾病鏈夌被鍨嬪畨鍏ㄥ拰浠g爜鍐椾綑鐨勯棶棰樸?br id="dins">     錛堥『渚挎彁涓涓嬶紝榪欑鏂瑰紡涔熷彲浠ヨ繍鐢ㄥ湪綾誨瀷涓嶅悓鐨勬儏鍐典笅銆傛瘮濡備袱涓被鍨嬩笉瀹屽叏鐩稿悓錛屼絾鏄熀鏈绱犻兘涓鏍楓傞偅涔堝氨鍙互浣跨敤concept_map鐨勯傞厤鍔熻兘錛? 灝嗕袱涓被鍨嬬粺涓鍦ㄤ竴涓猚oncept涓嬨傝繖縐嶆柟寮忕浉姣攐op鐨凙dapter妯″紡錛屾洿鍔犵畝媧併俛dapter鏈韓鏄竴涓猚ontainer錛屽畠鎵瀹炵幇鐨勬帴 鍙e嚱鏁幫紝閮藉繀欏諱竴涓杞彂鍒板唴閮ㄧ殑瀵硅薄錛岀紪鍐欒搗鏉ョ浉褰撶箒鐞愩備絾鍦╟oncept_map涓紝瀵逛簬閭d簺絎﹀悎concept鎻忚堪鐨勫嚱鏁版棤闇鍙﹁澶? 鐞嗭紝concept浼氳嚜鍔ㄥ尮閰嶏紝鍙渶瀵歸偅浜涗笉絎﹀悎瑕佹眰鐨勫嚱鏁版墽琛岄傞厤銆傦級

    鍓嶉潰璇磋繃錛屾寚閽堟暟緇勭殑絳変環鎬т綋鐜頒簡涓縐嶇洿瑙傜殑緙栫▼妯″瀷銆備絾鏄紝鎸囬拡鍜屾暟緇勬瘯绔熻繕鏄瓨鍦ㄥ緢澶氬樊鍒紝姣斿鎸囬拡浠呬粎琛ㄨ揪浜嗕竴緇勫璞″湪鍐呭瓨涓殑浣嶇疆錛屼絾騫舵湭鎼哄甫瀵硅薄鏁伴噺鐨勪俊鎭傚洜鑰岋紝褰撴暟緇勯鍖栨垚鎸囬拡鏃訛紝渚垮凡緇忓け鍘諱簡鏁扮粍鐨勮韓浠斤細
    void func(int* x);
    int a[20];
    func(a);
    榪欓噷錛屽湪鍑芥暟func涓凡緇忔棤娉曞皢a浣滀負鏁扮粍澶勭悊錛屽洜涓烘棤娉曠煡閬撳彉鎴恑nt*鍚庣殑a鏈夊澶ф潵閬垮厤瓚婄晫銆傜敋鑷蟲垜浠棤娉曟妸a浣滀負澶氫釜瀵硅薄鏋勬垚鐨勫唴瀛樺潡鐪嬪緟錛屽洜涓烘垜浠笉鐭ラ亾澶у皬銆傚洜姝わ紝鍙湁鏄懼紡鍦扮粰鍑烘暟緇勫ぇ灝忥紝鎵嶈兘浣跨敤錛?br id="v51o">    void func(int* x, long size);
    浣嗘槸錛屽湪concept鐨勪綔鐢ㄤ笅錛屾暟緇勫拰鎸囬拡寰椾互渚濈劧淇濇寔瀹冧滑鐨勭瓑浠鋒х殑鎯呭喌涓嬶紝瑙e喅鏁扮粍閫鍖栭棶棰樸傝冭檻榪欐牱涓や釜鍑芥暟錛?br id="ihaq">    void func1(Pointer x);
    void func2(Container x);
    鍏朵腑錛孭ointer鏄唬琛ㄦ寚閽堢殑concept錛岃孋ontainer鍒欐槸浠h〃瀹瑰櫒鐨刢oncept銆傚繀欏繪敞鎰忕殑鏄紝Pointer鏄弗鏍兼剰涔変笂鐨勬寚 閽堬紝涔熷氨鏄鏃犳硶鍦≒ointer涓婃墽琛岃凱浠f搷浣溿侾ointer鍙兘浣滀負鎸囬拡浣跨敤錛屽彧鍏峰dereference鐨勮兘鍔涳紙寰堝儚java鐨?#8220;鎸囬拡”錛屼笉鏄? 鍚楋紵concept鍦ㄦ病鏈夋斁寮僀鐨勫簳灞傜壒鎬х殑鎯呭喌涓嬩篃鍋氬埌浜嗐傦級銆傝孋ontainer鍒欐槸涓撻棬鐢ㄦ潵琛ㄨ揪瀹瑰櫒鐨刢oncept錛屽叾鍩烘湰鐨勭壒鎬т究鏄凱浠c傚湪 func1涓紝鏃犳硶瀵瑰艦鍙倄鎵ц榪唬錛屼粎浠呭皢鍏朵綔涓烘寚鍚戜竴涓璞$殑鎸囬拡澶勭悊錛屼繚璇佸叾瀹夊叏鎬с傝屽浜庨渶瑕佽繘琛岃凱浠f搷浣滅殑func2鑰岃█錛寈鍒欐槸鍙互閬嶅巻鐨勩? 浜庢槸錛屽浜庡悓涓涓暟緇刟錛屼袱涓嚱鏁板垎鍒粠涓嶅悓鐨勮搴﹀鍏惰繘琛屽鐞嗭細
    int a[20];
    func1(a); //a鐩存帴浣滀負鎸囬拡澶勭悊錛屼絾涓嶈兘榪唬
    func2(a); //a浣滀負瀹瑰櫒澶勭悊錛屽彲浠ヨ凱浠o紝騫朵笖鍏跺昂瀵鎬俊鎭篃涓鍚屼紶鍏?br id="sq1o0">    姝ゅ瀹為檯涓婃槸鍒╃敤浜哻oncept瀵圭被鍨嬬壒鎬х殑鎻忚堪浣滅敤錛屽皢鍏鋒湁涓ら噸鎬х殑鏁扮粍綾誨瀷錛堟暟緇刟鍗充唬琛ㄤ簡鏁扮粍榪欎釜瀹瑰櫒錛屼篃浠h〃浜嗘暟緇勭殑璧峰鍦板潃錛変互涓嶅悓鐗瑰緛鍔犱互 琛ㄨ揪錛屼互婊¤凍涓嶅悓搴旂敤鐨勯渶姹傘傛暟緇勪粛鐒跺彲浠ラ鍖栨垚鎸囬拡錛孋鐨勭洿瑙傛ā鍨嬪緱鍒頒繚鐣欙紝鍦ㄥ緢澶氱壒孌婄殑鍦哄悎鍙戞尌浣滅敤銆備絾鍦ㄥ叾浠栧簲鐢ㄥ満鏅紝鍙互鏇村姞瀹夊叏鍦頒嬌鐢ㄦ暟緇勩?br id="u6hz">   

鎬葷粨

    緇間笂鎵榪幫紝C++鏈兘鐪熸寤剁畫C鐨勭洿瑙傜畝媧侊紝涓昏鏄敱浜庡姩澶氭佺殑涓浜涘熀紜璁炬柦鐮村潖浜咰鐨勭紪紼嬫ā鍨嬨傚洜鑰岋紝鎴戜滑鍙互閫氳繃鏀懼純鍔ㄥ鎬侊紝鍙婂叾鐩稿叧鐨勪竴浜涙妧鏈紝浠? 涔嬩互鏇村姞“鍜岃皭”鐨剅untime concept錛屼嬌寰桟++鍦ㄥ熀鏈繚鐣機鐨勭紪紼嬫ā鍨嬬殑鍚屾椂錛岃幏寰椾簡鐩告瘮鍘熸潵鏇村ソ鐨勮蔣浠跺伐紼嬬壒鎬с傝嚦姝わ紝榪欑鏀瑰彉鍚庣殑C++錛堝鏋滆繕鑳界О涓篊++鐨勮瘽錛夋嫢鏈? 濡備笅鐨勪富騫茬壒鎬э細
    1銆丼P錛屾潵鑷簬C銆?br id="anaw">    2銆佸畬鍏╬od鍖栥?br id="anaw0">    3銆丱B銆備繚鐣欎簡灝佽鍜孯AII銆傚敖綆′篃淇濈暀浜嗙戶鎵匡紝浣嗗叾浣滅敤浠呴檺浜庝唬鐮佸鐢紝紱佹鍩轟簬緇ф壙鐨勯殣寮忕被鍨嬭漿鎹€?br id="anaw1">    4銆丟P錛屽寘鎷瑂tatic鍜宺untime concept銆傝繖鏄娊璞¢珮綰х壒鎬х殑鏍稿績鍜屽熀鐭熾?br id="f0qf3">    榪欐牱鐨勮璦鐗規у疄璐ㄤ笂姣旂幇鏈夌殑C++鏇村姞綆媧侊紝浣嗘槸鍏惰兘鍔涙洿鍔犲己澶с備篃姣擟++鏇存槗浜庤創榪慍鐨勭紪紼嬫ā鍨嬶紝浠ヤ究閫傚簲搴曞眰鐨勫紑鍙戙傛垜涓嶈兘璇磋繖鏍風殑鍙樺寲鏄惁浼氫駭鐢熶竴涓洿濂界殑璇█錛屼絾鏄垜鐩鎬俊榪欎簺鐗規ф湁鍔╀簬鏋勯犳洿鍔犲潎琛$粺涓鐨勮璦銆?


]]>
GP鎶鏈殑灞曟湜鈥斺斿厛鏈夐縛閽у悗鏈夊ぉ http://www.shnenglu.com/longshanks/archive/2008/07/26/57246.htmllongshankslongshanksSat, 26 Jul 2008 11:44:00 GMThttp://www.shnenglu.com/longshanks/archive/2008/07/26/57246.htmlhttp://www.shnenglu.com/longshanks/comments/57246.htmlhttp://www.shnenglu.com/longshanks/archive/2008/07/26/57246.html#Feedback10http://www.shnenglu.com/longshanks/comments/commentRss/57246.htmlhttp://www.shnenglu.com/longshanks/services/trackbacks/57246.html

GP鎶鏈殑灞曟湜鈥斺斿厛鏈夐縛閽у悗鏈夊ぉ

鑾崕鏋?br>

    鑷粠楂樼駭璇█鍑虹幇浠ユ潵錛岀被鍨嬪緇堟槸璇█鐨勬牳蹇冦傚嚑涔庢墍鏈夎璦鐗規ч兘瑕佷互綾誨瀷浣滀負鍏堝喅鏉′歡銆傜被鍨嬬姽濡傚ぉ鍦幫紝鍏堜簬涓囩墿鑰屽瓨鍦ㄣ備絾鏄紝鏄惁榪樻湁浠涔堜笢瑗挎瘮綾誨瀷鏇村姞鍘熷錛屾洿鍔犳湰璐紝鑰屽厛浜庡畠瀛樺湪鍛紵璇峰線涓嬬湅銆?)

娉涘瀷鍜岀被鍨?/h3>     娉涘瀷鏈綆鐭渶鐩磋鐨勬弿榪版亹鎬曞簲璇ユ槸錛歵he class of type銆傚敖綆¤繖鏍風殑鎻忚堪涓嶇畻鏈瀹屽錛屼絾涔熻凍浠ヨ鏄庨棶棰樸傛棭鍦?0騫翠唬錛屾硾鍨嬬殑姒傚康渚垮凡緇忓嚭鐜般傛渶鍒濅互“鍙傛暟鍖栫被鍨?#8221;鐨勫悕涔夊瓨鍦ㄣ?0騫翠唬鏈湡鍙戝睍璧鋒潵鐨? 鎭愰緳綰х殑Ada錛堟垜鐨勬剰鎬濅笉鏄Augusta Ada Byron Lovelace浼埖澶漢鏄亹榫欙紝浠庣敾鍍忎笂鐪嬶紝榪欎綅紼嬪簭鍛樼殑紲栧笀濂墮暱寰楃浉褰撴紓浜?)錛夛紝灝氭湭鎷ユ湁oop錛圓da83錛夛紝渚垮凡緇忓疄鐜頒簡娉涘瀷錛圙eneric)銆傚敖綆℃硾鍨嬪巻鍙叉偁涔咃紝浣嗙湡姝e叏闈㈠湴鍙戝睍璧鋒潵錛岃繕鏄湪90騫翠唬鍒濓紝 澶╂墠鐨?a title="Alexander a. stepanov" id="fx3k3">Alexander A. Stepanov鍒涘緩浜唖tl錛屼績浣夸簡“娉涘瀷緙栫▼”錛?a title="Generic programming" id="fx3k5">Generic Programming錛夌殑紜珛銆?br id="fx3k6">    鍑轟簬綆渚跨殑鐩殑錛屾垜濂楃敤涓涓佹帀鐗欑殑“閫氱敤瀹瑰櫒”鏉ヨВ閲婃硾鍨嬬殑姒傚康銆傦紙灝辯畻鎴戞暦琛嶅惂:P錛屾瘯绔熼噸澶存垙鍦ㄥ悗闈紝鍏蜂綋鐨勮鐪嬪墠闈㈢粰鍑虹殑閾炬帴錛夈傚亣璁炬垜鍦ㄧ紪紼嬫椂闇瑕佷竴涓猧nt綾誨瀷鐨勬爤錛屼簬鏄垜鍋氫簡涓涓被瀹炵幇榪欎釜鏍堬細
    class IntStack {...};
    鐢ㄧ殑寰堝ソ銆傝繃浜嗕袱澶╋紝鎴戝張闇瑕佷竴涓爤錛屼絾鏄被鍨嬪彉鎴愪簡double銆備簬鏄紝鎴戝啀鍙﹀啓涓涓細
    class DoubleStack {...};
    涓嶅緱浜嗭紝濂借薄鏄氫簡椹渹紿濓紝涓嶆柇鍦板嚭鐜頒簡鍚勭綾誨瀷鐨勬爤鐨勯渶姹傦紝鏈塻tring鐨勶紝鏈塪atetime鐨勶紝鏈塸oint鐨勶紝鐢氳嚦榪樻湁涓涓狣ialog鐨勩傛瘡 縐嶇被鍨嬮兘寰楀啓涓涓被錛岃屼笖姣忔浠g爜鍑犱箮涓鏍鳳紝鍙槸鎵娑夊強鐨勭被鍨嬩笉鍚岃屽凡銆備簬鏄紝鎴戝氨鐑垏鍦版湡鏈涘嚭鐜頒竴縐嶄笢瑗匡紝瀹冨彧鏄竴涓唬鐮佺殑妗嗘灦錛屽疄鐜頒簡stack鐨勬墍 鏈夊姛鑳斤紝鍙槸鎶婄被鍨嬬┖鐫銆傜瓑鍝ぉ鎴戦渶瑕佷簡錛屾妸鏂扮殑綾誨瀷濉繘鍘伙紝渚垮緱鍒頒竴涓柊鐨剆tack綾匯?br id="fx3k11">    榪欎究鏄硾鍨嬨?br id="fx3k12">    浣嗘槸錛屼粎浠呰繖浜涳紝榪樹笉瓚充互鎴愬氨GP鐨勫▉鍚嶃?br id="fx3k13">    鎴戞湁涓涓彜鎬殑闇姹傦紙鍛靛懙錛岀戶緇暦琛嶃?)錛夛細
    鍋氫竴涓ā鏉匡紝鍐呴儴鏈変竴涓獀ector<>鎴愬憳錛?br id="fx3k15">    template<typename T> A
    {
        ...
        vector<T> m_x;
    };
    鍙槸錛屽鏋滅被鍨嬪疄鍙傛槸int綾誨瀷鐨勮瘽錛屽氨寰楃敤set<>銆備負浜嗕嬌鐢ㄧ殑鏂逛究錛屾ā鏉垮悕榪樺緱鏄疉銆備簬鏄紝鎴戜滑灝卞緱浣跨敤涓嬮潰鐨勬妧宸э細
    template<> A<int>
    {
        ...
        set<T> m_x;
    };
    榪欏彨鐗瑰寲錛坰pecialization錛夛紝鐩稿綋浜庡憡璇夌紪璇戝櫒濡傛灉綾誨瀷瀹炲弬鏄痠nt錛岀敤鍚庨潰閭d釜銆傚惁鍒欙紝鐢ㄥ墠闈㈢殑銆傜壒鍖栧疄闄呬笂灝辨槸鏍規嵁綾誨瀷瀹炲弬鐢辯紪璇戝櫒鎵ц妯℃澘鐨勯夋嫨銆傛崲鍙ヨ瘽璇達紝鐗瑰寲鏄竴縐嶇紪璇戞湡鍒嗘淳鎶鏈?br id="fx3k27">    榪欓噷榪樻湁鍙︿竴涓洿鍙ゆ渶姹傦細濡傛灉綾誨瀷瀹炲弬鏄寚閽堢殑璇濓紝灝辯敤list<>銆傝繖灝卞緱鐢ㄥ埌鍙︿竴縐嶇壒鍖栦簡錛?br id="fx3k28">    template<typename T> A<T*>
    {
        ...
        list<T> m_x;
    }
    榪欐槸灞閮ㄧ壒鍖栵紙partial specialization錛夛紝鑰屽墠闈㈢殑閭g鍙仛鏄懼紡鐗瑰寲錛坋xplicit specialization錛夛紝涔熷彨鍏ㄧ壒鍖栥傚眬閮ㄧ壒鍖栧垯鏄牴鎹被鍨嬪疄鍙傜殑鐗瑰緛錛堟垨鑰呭垎綾伙級鎵ц鐨勬ā鏉塊夋嫨銆?br id="fx3k34">    鏈鍚庯紝榪樻湁涓涓渶鍙ゆ殑闇姹傦細濡傛灉綾誨瀷瀹炲弬鎷ユ湁褰㈠void func(int a)鎴愬憳鍑芥暟鐨勭被鍨嬶紝閭d箞灝變嬌鐢╠eque銆傝繖涓?..錛屾湁鐐歸毦銆傜幇鏈夌殑C++緙栬瘧鍣紝鏄棤娉曟弧瓚寵繖涓姹傜殑銆備笉榪囧笇鏈涜繕鏄湁鐨勶紝鍦ㄦ湭鏉ョ殑鏂扮増C++09涓紝鎴戜滑渚垮彲浠ヨВ鍐寵繖涓棶棰樸?br id="fx3k35">

Concept鍜岀被鍨?/h3>     concept鏄疓P鍙戝睍蹇呯劧緇撴灉銆傛濡傚墠闈㈡墍鎻愬埌鐨勯渶姹傦紝鎴戜滑鏈夋椂鍊欎細闇瑕佺紪璇戝櫒鑳藉閴磋瘑鍑虹被鍨嬬殑鏌愪簺鐗瑰緛錛屾瘮濡傛嫢鏈夌壒瀹氱殑鎴愬憳絳夌瓑錛岀劧鍚庢墽琛屾煇縐嶆搷浣溿備笅闈㈡槸涓涓渶甯哥敤鐨勪緥瀛愶細
    swap()鏄竴涓潪甯告湁鐢ㄧ殑鍑芥暟妯℃澘錛屽畠鍙互浜ゆ崲涓や釜瀵硅薄鐨勫唴瀹癸紝榪欐槸swap鎵嬫硶鐨勫熀紜銆俿wap()鐨勫熀鏈畾涔夊樊涓嶅鏄繖鏍鳳細
    template<typename T> swap(T& lhs, T& rhs) {
        T tmp(lhs);
        lhs=rhs;
        rhs=tmp;
    }
    浣嗘槸錛屽鏋滈渶瑕佷氦鎹㈢殑瀵硅薄鏄鍣ㄤ箣綾葷殑澶у瀷瀵硅薄錛岄偅涔堣繖涓猻wap()鐨勬ц兘浼氬緢宸傚洜涓哄畠鎵ц浜嗕笁嬈″鍒訛紝榪欏線寰鏄疧(n)鐨勩傛爣鍑嗗鍣ㄩ兘鎻愪緵浜嗕竴涓? swap鎴愬憳鍑芥暟錛岄氳繃浜ゆ崲瀹瑰櫒鍐呮寚鍚戞暟鎹紦鍐茬殑鎸囬拡錛岃幏寰桹(1)鐨勬ц兘銆傚洜姝わ紝swap()鎴愬憳鏄閫変嬌鐢ㄧ殑銆備絾鏄紝榪欏氨闇瑕佺▼搴忓憳璇嗗埆瀵硅薄鏄惁瀛樺湪 swap鎴愬憳錛岀劧鍚庡姞浠ヨ皟鐢ㄣ傚鏋渟wap()鍑芥暟鑳藉鑷姩璇嗗埆瀵硅薄鏄惁瀛樺湪swap鎴愬憳錛岄偅涔堝氨鍙互鏂逛究寰堝銆傚鏋滄湁swap鎴愬憳錛屽氨璋冪敤鎴愬憳錛屽惁鍒欙紝 灝辨槸鐢ㄤ笂榪伴氳繃涓棿鍙橀噺浜ゆ崲鐨勭増鏈?br id="fx3k46">    榪欏氨闇瑕佺敤鍒癱oncept鎶鏈簡錛?br id="fx3k47">    template<Swappable T> void swap(T& lhs, T& rhs) {
        lhs.swap(rhs);
    }
    榪欓噷錛孲wappable鏄竴涓猚oncept錛?br id="fx3k51">    concept Swappable<typename T> {
        void T::swap(T&);
    }
    浜庢槸錛屽鏋滈亣鍒版嫢鏈塻wap鎴愬憳鍑芥暟鐨勫璞★紝姝eソ絎﹀悎Swappable concept錛岀紪璇戝櫒鍙互浣跨敤絎簩涓増鏈紝鍦∣(1)澶嶆潅搴﹀唴瀹屾垚浜ゆ崲銆傚惁鍒欙紝渚夸嬌鐢ㄥ墠涓涓増鏈細
    vector a, b;
    ... //鍒濆鍖朼鍜宐
    swap(a,b); //浣跨敤鍚庝竴涓増鏈?br id="fx3k58">    int c=10, d=23;
    swap(c, d); //浣跨敤鍓嶄竴涓増鏈?br id="fx3k60">    榪欓噷鐨剆wap()涔熸槸榪愮敤浜嗙壒鍖栵紝鎵涓嶅悓鐨勬槸鍦╟oncept鐨勬寚瀵間笅榪涜鐨勩傝繖鏍風殑鐗瑰寲鏈夋椂涔熻縐頒綔concept based overload銆?br id="fx3k61">    浠庝笂闈㈢殑渚嬪瓙涓彲浠ョ湅鍒幫紝鍘熷厛鐨勭壒鍖栵紝鏃犺鏄叏鐗瑰寲錛岃繕鏄眬閮ㄧ壒鍖栵紝瑕佷箞鐗瑰寲涓涓被鍨嬶紝瑕佷箞鐗瑰寲涓涓ぇ綾伙紙濡傛寚閽堬級鐨勭被鍨嬨備絾鏃犳硶鍋氬埌鏇村姞綺劇粏銆傛瘮濡傦紝鎴? 甯屾湜涓涓ā鏉胯兘澶熼拡瀵規墍鏈夌殑鏁存暟錛坕nt錛宭ong錛宻hort錛宑har絳夛級榪涜鐗瑰寲錛岃繖鍦ㄥ師鍏堟槸鏃犳硶鍋氬埌鐨勩備絾鎷ユ湁浜哻oncept涔嬪悗錛屾垜浠究鍙互 瀹氫箟涓涓唬琛ㄦ墍鏈夋暣鏁扮殑concept錛岀劧鍚庝嬌鐢ㄨ繖涓暣鏁癱oncept鎵ц鐗瑰寲銆傛崲鍙ヨ瘽璇達紝concept浣垮緱鐗瑰寲鏇村姞綺劇粏浜嗭紝鏁翠釜娉涘瀷緋葷粺浠庡師鏉?#8220;紱? 鏁?#8221;鐨勫彉鎴愪簡“榪炵畫”鐨勩?br id="fx3k62">    涓嶈繃涓婇潰閭d釜concept鐗瑰寲鐨勬ā鏉跨湅璧鋒潵瀹炲湪涓嶇畻濂界湅錛屽ご涓婇偅涓鍧╰emplate...瀹炲湪鏈夌瑙傜灮銆傛棦鐒舵槸concept based overload錛岄偅涔堜綍涓嶇洿鎺ヤ嬌鐢ㄩ噸杞界殑褰㈠紡錛岃屼笉蹇呭啀甯︿笂绱禈鐨則emplate<...>錛?br id="fx3k66">    void fun(anytype a){...} //#1錛宎nytype鏄吉閫犵殑鍏抽敭瀛楋紝琛ㄧず鎵鏈夌被鍨嬨傝繖涓滆タ鏈濂藉皯鐢ㄣ?br id="fx3k67">    void fun(Integers a){...} //#2錛孖ntegers鏄痗oncept錛岃〃紺烘墍鏈夋暣鍨嬬被鍨?br id="fx3k68">    void fun(Floats a){...} //#3錛孎loats鏄痗oncept錛岃〃紺烘墍鏈夋誕鐐圭被鍨?br id="fx3k69">    void fun(long a){...} //#4
    void fun(int a){...} //#5
    void fun(double a){...} //#6
    ...
    int x=1;
    long y=10;
    short z=7;
    string s="aaa";
    float t=23.4;
    fun(x); //閫夋嫨#5
    fun(y); //閫夋嫨#4
    fun(z); //閫夋嫨#2
    fun(s); //閫夋嫨#1
    fun(t); //閫夋嫨#3
    榪欑褰㈠紡鍦ㄨ涔変笂涓庡師鏉ョ殑妯℃澘褰㈠紡鍑犱箮涓鏍楓傛敞鎰忥紝鏄嚑涔庛傚涓嬬殑鎯呭艦鏄噸杞藉艦寮忔棤娉曞仛鍒扮殑錛?br id="fx3k84">    template<Integers T> T swap(T lhs, T rhs) {
        T temp(lhs);
        ...
    }
    榪欓噷錛屾ā鏉垮仛鍒頒簡涓や歡浜嬶細鍏朵竴錛屾ā鏉胯悆鍙栧嚭綾誨瀷T錛屽湪鍑芥暟浣撲腑錛屽彲浠ヤ嬌鐢═鎵ц涓浜涙搷浣滐紝姣斿涓婅堪浠g爜涓殑涓存椂瀵硅薄temp鐨勬瀯閫犮傝繖涓棶棰樺鏄撹В鍐籌紝鍥犱負钀冨彇綾誨瀷T榪樻湁鍏朵粬鐨勬柟娉曪紝涓涓猼ypeof()鎿嶄綔絎︿究鍙疄鐜幫細
    Integers swap(Integers lhs, Integers rhs) {
        typeof(lhs) temp(lhs);
        ...
    }
    鍏朵簩錛屾ā鏉夸繚璇佷簡lhs錛宺hs鍜岃繑鍥炲奸兘鏄悓涓綾誨瀷銆傝繖涓棶棰橈紝鍙互閫氳繃鏂藉姞鍦ㄥ嚱鏁頒笂鐨刢oncept綰︽潫瑙e喅錛?br id="fx3k94">    Integers swap(Integers lhs, Integers rhs)
        requires SameType<lhs, rhs>
            && SameType<lhs, retval> {  //retval鏄潨鎾扮殑鍏抽敭瀛楋紝鐢ㄤ互琛ㄧず榪斿洖鍊?br id="fx3k97">        typeof(lhs) temp(lhs);
        ...
    }
    鐩告瘮涔嬩笅錛岄噸杞藉艦寮忔瘮杈冪箒鐞愩傛諱綋鑰岃█錛屽敖綆¢噸杞藉艦寮忓啑闀夸竴浜涳紝浣嗗惈涔夋洿鍔犳槑紜紝鏇村姞鐩磋銆傚茍涓斿湪concept鐨勬帴鍙e姛鑳戒綔鐢ㄤ笅錛屽鍙傛暟綾誨瀷涓鑷寸殑瑕佹眰 閫氬父騫朵笉澶氳錛堜竴鑸湪鍩烘湰綾誨瀷錛屽鏁村瀷絳夛紝鐨勮繍綆楀鐞嗕腑杈冨瑙併傚洜涓鴻繖浜涙搷浣滆姹傜被鍨嬫湁鐗瑰畾鐨勯暱搴︼紝浠ュ厤婧㈠嚭銆傚叾浠栫被鍨嬶紝鐗瑰埆鏄敤鎴峰畾涔夌被鍨嬶紝閫氬父鐢變簬灝? 瑁呯殑浣滅敤錛屼笉浼氬綾誨瀷鐨勫唴閮ㄧ壒鎬ф湁榪囧瑕佹眰錛屽惁鍒欏氨涓嶅簲浣跨敤娉涘瀷綆楁硶錛夈傚鏋滃彲浠ユ敼鍙樿娉曠殑璇濓紝閭d箞灝辮兘鐢ㄨ濡侤浠f浛typeof錛?=浠f浛 SameType鐨勬柟娉曞噺灝戜唬鐮侀噺錛?br id="fx3k101">    Integers swap(Integers lhs, Integers rhs)
        requires @lhs == @rhs && @lhs == @retval {
        @lhs temp(lhs);
        ...
    }
   

Concept銆佺被鍨嬪拰瀵硅薄

    浜嬫儏榪樺彲浠ユ湁鏇村姞澶稿紶鐨勫彂灞曘傚墠闈㈠娉涘瀷榪涜浜嗙壒鍖栵紝鑳戒笉鑳藉綾誨瀷涔熸潵涓鐣?#8220;鐗瑰寲”鍛紵褰撶劧鍙互錛?br id="z2t-">    void fun(int a);
    void fun(int a:a==0); //瀵逛簬綾誨瀷int鑰岃█錛宎==0渚挎槸“鐗瑰寲”浜?br id="j1om">    鏇村畬鏁寸殑錛屼篃鍙互鏈?#8220;灞閮ㄧ壒鍖?#8221;錛?br id="fx3k110">    void fun(int a); //#1
    void fun(int a:a==0); //#2
    void fun(int a:a>200); //#3
    void fun(int a:a<20&&a>10); //#4
    void fun(int a:(a>70&&a<90)||(a<-10)); //#5
    ...
    int a=0, b=15, c=250, d=-50;
    fun(80); //浣跨敤#5
    fun(50); //浣跨敤#1
    fun(a); //浣跨敤#2
    fun(b); //浣跨敤#4
    fun(c); //浣跨敤#3
    fun(d); //浣跨敤#5
    瀹為檯涓婏紝榪欐棤闈炴槸鍦ㄥ弬鏁板0鏄庝箣鍚庡姞涓婁竴緇勭害鏉熸潯浠訛紝鐢ㄤ互琛ㄦ槑璇ョ増鏈嚱鏁扮殑閫夋嫨鏉′歡銆傛病鏈夌害鏉熺殑鍑芥暟鐗堟湰鍦ㄦ病鏈変換浣曠害鏉熸潯浠跺尮閰嶇殑鎯呭喌涓嬭閫夋嫨銆傚浜庝嬌鐢ㄧ珛 鍗蟲暟鎴栬呴潤鎬佸璞$殑璋冪敤鑰岃█錛屽嚱鏁扮殑閫夋嫨鍦ㄧ紪璇戞湡鎵ц錛岀紪璇戝櫒鏍規嵁鏉′歡鐩存帴璋冪敤鍖歸厤鐨勭増鏈傚浜庡彉閲忎綔涓哄疄鍙傜殑璋冪敤鑰岃█錛屽垯闇瑕佸睍寮錛岀紪璇戝櫒灝嗚嚜鍔ㄧ敓鎴愬 涓嬩唬鐮侊細
    //棣栧厛灝嗗嚱鏁伴噸鏂板懡鍚嶏紝璧嬩簣鍞竴鐨勫悕縐?br id="fx3k125">    void fun_1(int a); //#1
    void fun_2(int a); //#2
    void fun_3(int a); //#3
    void fun_4(int a); //#4
    void fun_5(int a); //#5
    //鐒跺悗鏋勯犲垎媧懼嚱鏁?br id="fx3k131">    void fun_d(int a) {
        if(a==0)
            fun_2(a);
        else if(a>200)
            fun_3(a);
        ...
        else
            fun_1(a);
    }
    鍦ㄦ煇浜涙儏鍐典笅錛屽彲鑳介渶瑕佸涓涓璞$殑鎴愬憳鍋氬嚭綰︽潫錛屾鏃朵究鍙互閲囩敤榪欑褰㈠紡錛?br id="fx3k141">    struct A
    {
        float x;
    };
    ...
    void fun(A a:a.x>39.7);
    ...
    榪欑鏂藉姞鍦ㄧ被鍨嬩笂鐨勬墍璋?#8220;鐗瑰寲”瀹為檯涓婂彧鏄竴縐嶈娉曠硸錛屽彧鏄敱緙栬瘧鍣ㄨ嚜鍔ㄧ敓鎴愪簡鍒嗘淳鍑芥暟鑰屽凡銆傝繖涓満鍒跺湪Haskell絳夎璦涓棭宸插瓨鍦紝騫朵笖鍦ㄤ嬌鐢ㄤ笂甯? 鏉ュ緢澶х殑鐏墊椿鎬с傚鏋滄病鏈夎繖縐嶆満鍒訛紝閭d箞涓鏃﹂渶瑕佸鍔犲嚱鏁板垎媧炬潯浠訛紝閭d箞蹇呴』鎵嬪伐淇敼鍒嗘淳鍑芥暟銆傚鏋滆繖浜涘嚱鏁幫紝鍖呮嫭鍒嗘淳鍑芥暟錛屾槸絎笁鏂規彁渚涚殑浠g爜錛岄偅涔堜慨 鏀瑰皢鏄緢楹葷儲鐨勪簨銆傝屼竴鏃︽嫢鏈変簡榪欑鏈哄埗錛岄偅涔堝彧闇娣誨姞涓涓浉搴旂殑鍑芥暟閲嶈澆鍗沖彲銆?br id="fx3k149">    褰揷oncept-綾誨瀷閲嶈澆鍜岀被鍨?瀵硅薄閲嶈澆娣峰悎鍦ㄤ竴璧鋒椂錛屼究浣撶幇鏇村ぇ鐨勪綔鐢細
    void fun(anytype a);
    void fun(Integers a);
    void fun(Floats a);
    void fun(long a);
    void fun(int a);
    void fun(double a);
    void fun(double a:a==0.8);
    void fun(short a:a<10);
    void fun(string a:a=="abc");
    ...
    concept-綾誨瀷-瀵硅薄閲嶈澆浣撶郴閬靛驚涓涓師鍒欙細浼樺厛閫夋嫨鍖歸厤鐨勫嚱鏁頒腑鏈鐗瑰寲鐨勩傝繖瀹為檯涓婃槸綾誨瀷閲嶈澆瑙勫垯鐨勬墿灞曘傚ぇ鐨勬潵璇達紝鎵鏈夌被鍨嬫瘮鎵灞炵殑 concept鏇村姞鐗瑰寲錛屾墍鏈夊璞$害鏉熸瘮鎵灞炵殑綾誨瀷鏇村姞鐗瑰寲銆傚浜巆oncept鑰岃█錛屽鏋渃oncept A refine鑷猚oncept B錛岄偅涔圓姣擝鏇村姞鐗瑰寲銆傚悓鏍鳳紝濡傛灉涓涓被鍨嬬殑綰︽潫寮轟簬鍙︿竴涓紝閭d箞鍓嶄竴涓氨姣斿悗涓涓洿鍔犵壒鍖栵紝姣斿a==20姣攁>10鏇村姞鐗瑰寲銆傜患鍚堣搗鏉ワ紝鍙互 鏈夎繖鏍蜂竴涓娊璞$殑瑙勫垯錛氫袱涓害鏉燂紙concept錛屾垨鑰呮柦鍔犲湪瀵硅薄涓婄殑綰︽潫錛堿鍜孊錛屼綔鐢ㄥ湪綾誨瀷鎴栬呭璞′笂鍒嗗埆浜х敓闆嗗悎錛屽鏋淎浜х敓鐨勯泦鍚堟槸B浜х敓鐨勯泦鍚? 鐨勭湡瀛愰泦錛岄偅涔堜究璁や負A姣擝鏇村姞鐗瑰寲銆?br id="fx3k161">    鏍規嵁榪欎簺瑙勫垯錛屽疄闄呬笂鍙互瀵逛竴涓嚱鏁扮殑閲嶈澆鏋勯犲嚭涓涓?#8220;鐗瑰寲鏍?#8221;錛?br id="suy9">

    瓚婃帴榪戞爲鐨勬牴閮紝瓚婃硾鍖栵紝瓚婃帴榪戝彾瀛愶紝瓚婄壒鍖栥傝皟鐢ㄦ椂浣跨敤鐨勫疄鍙備究鍦ㄨ繖媯?#8220;鐗瑰寲鏍?#8221;涓婃悳绱紝鎵懼埌鏈鍖歸厤鐨勫嚱鏁扮増鏈?br id="fx3k163">    concept-綾誨瀷-瀵硅薄浣撶郴灝嗘硾鍨嬨佺被鍨嬪拰瀵硅薄緇熶竴鍦ㄤ竴涓郴緇熶腑錛屼嬌寰楀嚱鏁扮殑閲嶈澆錛堢壒鍖栵級鍏鋒湁鏇寸畝鍗曠殑褰㈠紡鍜岃鍒欍傚茍涓旓紝榪欎釜浣撶郴鍚屾牱鍙互寰堝ソ鍦板湪綾繪ā鏉夸笂浣跨敤錛岀畝鍖栨ā鏉跨殑瀹氫箟鍜屼嬌鐢ㄣ?br id="fx3k164">

綾繪ā鏉?/h3>     C++鐨勭被妯℃澘鐗瑰寲褰㈠紡騫朵笉鎯逛漢鍠滅埍錛?br id="fx3k166">    template<typename T> A{...}; //鍩虹妯℃澘
    template<> A<int>{...}; //鏄懼紡鐗瑰寲錛堝叏鐗瑰寲錛?br id="fx3k168">    template<typename T> A<T*>{...}; //灞閮ㄧ壒鍖?br id="fx3k169">    鍦–++09涓紝鍙互鐩存帴鐢╟oncept瀹氫箟妯℃澘鐨勭被鍨嬪艦鍙傦細
    template<Integers T> A{...};
    瀹炶川涓婏紝榪欑褰㈠紡鏈韓灝辨槸涓縐嶅眬閮ㄧ壒鍖栵紝鍥犺屽師鏈偅縐嶇瘡璧樺眬閮ㄧ壒鍖栧艦寮忓彲浠ュ簾闄わ紝浠d箣浠oncept椋庢牸鐨勫艦寮忥細
    template<Pointer T> A{...}; //Pointer琛ㄧず姝ゅ閲囩敤鎸囬拡鐗瑰寲妯℃澘
    鍚屾牱錛屽鏋滄帹騫垮埌鍏ㄧ壒鍖栵紝褰㈠紡涔熷氨榪涗竴姝ョ畝鍗曚簡錛?br id="fx3k174">    template<int> A{...}; //榪欎釜褰㈠紡鏈変簺紿佸厐錛岃繖閲屽彧鎵撶畻琛ㄨ揪榪欎釜鎰忔濓紝搴旇鏈夋洿“鍜岃皭”鐨勫艦寮?br id="fx3k175">    濡傛灉妯℃澘鍙傛暟鏄璞★紝鍒欎嬌鐢ㄧ幇鏈夌殑瀹氫箟褰㈠紡錛?br id="fx3k176">    template<int a> A{...};
    鏇磋繘涓姝ワ紝鍙互寮曞叆瀵硅薄鐨勭害鏉燂細
    template<int a:a>10> A{...};
    姝ゅ錛孋++涓湪妯℃澘鐗瑰寲涔嬪墠闇瑕佹湁鍩虹妯℃澘銆備絾瀹為檯涓婅繖鏄浣欑殑錛孌璇█宸茬粡鍙栨秷浜嗚繖涓檺鍒訛紝榪欏浜庣畝鍖栨ā鏉跨殑浣跨敤鏈夌潃鑾ぇ鐨勫府鍔┿?br id="fx3k180">

浠庢湰璐ㄤ笂璁?..

    浠庢湰璐ㄤ笂璁詫紝鎴戜滑鍙互鎶婃墍鏈夌被鍨嬬湅浣滀竴涓泦鍚圱={ti}錛岃宑oncept鍒欐槸鏂藉姞鍦ㄧ被鍨嬮泦鍚堜笂鐨勭害鏉熴傞氳繃concept榪欎釜綰︽潫錛屾垜浠究鍙互鑾峰緱綾? 鍨嬮泦鍚圱鐨勪竴涓瓙闆咰銆傜悊璁轟笂錛屾墍鏈塩oncept鎵瀵瑰簲鐨勭被鍨嬪瓙闆咰j鏋勬垚浜嗙被鍨嬮泦鍚堢殑騫傞泦{Cj}銆傚湪{Cj}涓紝鏈変袱綾葷被鍨嬪瓙闆嗘槸寰堢壒孌婄殑銆備竴緇勬槸 T鏈? 韜紝鍗蟲墍鏈夌被鍨嬨傚瓨鍦ㄤ竴涓猚oncept涓嶅T鏂藉姞浠諱綍綰︽潫錛屼究寰楀埌浜咰0=T銆傜浜岀被鍒欐槸鍙︿竴涓瀬绔紝瀛樺湪涓緇刢oncept錛屾柦鍔犲湪T涓婁箣鍚庢墍寰楃殑綾? 鍨嬪瓙闆嗕粎鍖呭惈涓涓被鍨嬶細Ci={ti}銆傜敱浜庤繖緇刢oncept涓庣被鍨嬪瓨鍦ㄤ竴涓瀵瑰簲鐨勫叧緋伙紝閭d箞鎴戜滑渚垮彲浠ョ敤榪欑粍concept鏉ユ寚浠g被鍨嬨備篃灝辨槸鎶婄被鍨? 浣滀負鐗規畩鐨刢oncept澶勭悊銆傚姝わ紝concept渚垮悓綾誨瀷緇熶竴鍦ㄤ竴涓綋緋諱腑銆傝繖縐嶅鐞嗗彲浠ヤ嬌鎴戜滑鑾峰緱鏋佸ぇ鐨勫ソ澶勩?br id="fx3k63">     榪欑粍鐗規畩鐨刢oncept浠嶆棫浣跨敤瀵瑰簲鐨勭被鍨嬪悕浣滀負縐拌皳錛屼粛鏃хО涔嬩負“綾誨瀷”錛屼絾鍏舵湰璐ㄤ笂榪樻槸concept銆備換浣曚竴涓被鍨嬶紝涓鏃﹀垱寤猴紝涔熷氨鍒涘緩浜嗙浉搴旂殑鐗規畩concept銆傚鏋滃湪妯℃澘鐗瑰寲涓嬌鐢ㄤ竴涓被鍨嬬殑鏃跺欙紝瀹為檯涓婂氨鏄湪浣跨敤鐩稿搴旂殑閭d釜鐗規畩concept錛?br id="fx3k64">     void func(typeA a); //灝界浣跨敤浜嗙被鍨嬪悕typeA錛屼絾瀹為檯涓婅繖閲屾墍鎸囩殑鏄痶ypeA鎵瀵瑰簲鐨勯偅涓壒孌奵oncept銆?br id="fx3k65">     鍦ㄨ繖涓猚oncept浣撶郴鐨勪綔鐢ㄤ笅錛屽嚱鏁版ā鏉跨殑鐗瑰寲鍜岄噸杞芥暣涓湴緇熶竴璧鋒潵錛坈oncept based overload錛夈?br id="s8-t">    鑷充簬浣滅敤鍦ㄧ被鍨嬩笂鐨勯偅縐?#8220;鐗瑰寲”錛屼篃鏄悓鏍風殑閬撶悊銆傚浜庝竴涓被鍨婽鑰岃█錛屽畠鎵鏈夌殑瀵硅薄鏋勬垚涓涓泦鍚圤銆傚鏋滃瓨鍦ㄤ竴緇勭害鏉熶綔鐢ㄤ簬O錛岄偅涔堟瘡 涓涓害鏉熷搴旂潃O鐨勪竴涓瓙闆嗐傜悊璁轟笂錛屾垜浠彲浠ユ瀯閫犲嚭涓緇勭害鏉燂紝浣垮緱浠栦滑鍚孫鐨勬瘡涓涓瓙闆嗕竴涓瀵瑰簲銆傚悓鏍鳳紝榪欎簺瀛愰泦涓湁涓ょ被瀛愰泦姣旇緝鐗規畩銆備竴綾繪槸鎵鏈夊璞? 鐨勯泦鍚堛傚彟涓綾諱究鏄彧鏈変竴涓璞$殑瀛愰泦銆備簬鏄紝鎴戜滑鍙互浣跨敤榪欑粍鐗規畩瀵硅薄瀛愰泦鎵瀵瑰簲鐨勭害鏉熸寚浠g浉搴旂殑瀵硅薄銆備篃灝辨槸灝嗗璞$湅浣滅壒孌婄殑綰︽潫銆傚姝わ紝綾誨瀷鍜屽璞? 涔熻緇熶竴鍦ㄤ竴涓郴緇熶腑浜嗐?br id="hh4e">    榪涜岋紝綾誨瀷鍦ㄩ昏緫涓婅浣滀負鐗規畩concept澶勭悊錛屽璞″垯琚綔涓虹壒孌婄殑綾誨瀷澶勭悊銆備簬鏄紝榪欎笁鑰呬究鍙互緇熶竴鍦ㄤ竴涓綋緋諱笅錛屼竴鍚屽弬涓庣壒鍖栥?br id="fx3k181">

鎬葷粨

    灝界褰㈠紡涓嶈兘浠h〃鏈川錛屼絾褰㈠紡鐨勫彉鍖栧線寰浼氬甫鏉ュ緢澶氭湁鐩婄殑榪涙銆傛洿閲嶈鐨勬槸錛屽緢澶氭湰璐ㄤ笂鐨勫彉鍖栨諱細浼撮殢鐫褰㈠紡涓婄殑鏀瑰彉銆傞氳繃灝哻oncept銆佺被鍨嬪拰瀵硅薄 鍦ㄩ昏緫涓婃暣鍚堝埌緇熶竴鐨勪綋緋諱箣涓紝渚垮彲浠ヤ績浣挎ā鏉褲佺壒鍖栥佸嚱鏁伴噸杞界瓑鏈哄埗鍦ㄥ艦寮忎笂杈炬垚緇熶竴銆備粠鑰岃兘澶熺畝鍖栬繖浜涘姛鑳界殑浣跨敤銆傝繖涔熸槸褰撳墠閲嶈璇█錛堝伐鍏鳳級鏄撶敤鎬? 鐨勬疆嫻佺殑涓涓繀鐒惰瘔姹傘傝繖涓艦寮忎笂鐨勭粺涓騫墮潪璇硶緋栦箣綾葷殑琛ㄩ潰鍙樺寲銆傝屾槸瀹屽叏渚濊禆浜巆oncept榪欎釜鏂板瀷鐨勭被鍨嬫弿榪幫紙娉涘瀷錛夌郴緇熺殑紜珛鍜屽彂灞曘? concept鐨勫嚭鐜幫紝寮ヨˉ浜嗕互寰娉涘瀷鐨勪笉瓚籌紝鎵懼洖浜嗘硾鍨嬬郴緇熺己澶辯殑鐜妭錛屽譏琛ヤ簡娉涘瀷鍚岀被鍨嬩箣闂寸殑瑁傜棔銆傚湪姝や綔鐢ㄤ笅錛屼究鍙互鏋勫緩璧穋oncept-綾誨瀷- 瀵硅薄鐨勬娊璞′綋緋伙紝鐢ㄧ粺涓鐨勭郴緇熷泭鎷繖涓変釜鍘熸湰鍒嗙珛鐨勬蹇點傚湪榪欎釜鏂扮殑涓変綅涓浣撶殑緋葷粺涓嬶紝浣垮緱妯℃澘鐨勭壒鍖栧拰閲嶈澆鎷ユ湁浜嗙浉鍚岀殑褰㈠紡錛岃繘鑰岃幏寰楁洿鐩磋鐨勮涔夛紝鍜? 鏇村ソ鐨勬槗鐢ㄦс?img src ="http://www.shnenglu.com/longshanks/aggbug/57246.html" width = "1" height = "1" />

]]>
C++鐨勮惀鍏燴斺攕wap鎵嬫硶http://www.shnenglu.com/longshanks/archive/2008/02/26/43258.htmllongshankslongshanksTue, 26 Feb 2008 07:16:00 GMThttp://www.shnenglu.com/longshanks/archive/2008/02/26/43258.htmlhttp://www.shnenglu.com/longshanks/comments/43258.htmlhttp://www.shnenglu.com/longshanks/archive/2008/02/26/43258.html#Feedback3http://www.shnenglu.com/longshanks/comments/commentRss/43258.htmlhttp://www.shnenglu.com/longshanks/services/trackbacks/43258.html闃呰鍏ㄦ枃

]]>
C++鐨勮惀鍏?/title><link>http://www.shnenglu.com/longshanks/archive/2008/02/16/42791.html</link><dc:creator>longshanks</dc:creator><author>longshanks</author><pubDate>Sat, 16 Feb 2008 00:19:00 GMT</pubDate><guid>http://www.shnenglu.com/longshanks/archive/2008/02/16/42791.html</guid><wfw:comment>http://www.shnenglu.com/longshanks/comments/42791.html</wfw:comment><comments>http://www.shnenglu.com/longshanks/archive/2008/02/16/42791.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/longshanks/comments/commentRss/42791.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/longshanks/services/trackbacks/42791.html</trackback:ping><description><![CDATA[     鎽樿: C++鐨勮惀鍏?鑾崕鏋?    鍔ㄧ墿閮戒細鎽勫彇椋熺墿錛屽惛鏀跺叾涓殑钀ュ吇錛岀敤浜庤嚜韜敓闀垮拰媧誨姩銆傜劧鑰岋紝騫墮潪椋熺墿涓墍鏈夌殑鐗╄川閮借兘涓哄姩鐗╂墍鍚告敹銆傞偅浜涙棤娉曟秷鍖栫殑鐗╄川錛岄氳繃娑堝寲閬撶殑鍙︿竴澶達紙鏌愪簺鍔?鐗╂秷鍖栭亾鍙湁涓澶達級鎺掑嚭浣撳銆備笉榪囷紝涓縐嶅姩鐗╂棤娉曟秷鍖栫殑鎺掓硠鐗╋紝鏄彟涓縐嶅姩鐗╋紙鐢熺墿錛夌殑椋熺墿錛屽悗鑰呭彲浠ヤ粠涓憚鍙栨墍闇鐨勮惀鍏匯?nbsp;   涓闂ㄧ紪紼嬭璦錛屽浜庣▼搴?..  <a href='http://www.shnenglu.com/longshanks/archive/2008/02/16/42791.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/longshanks/aggbug/42791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/longshanks/" target="_blank">longshanks</a> 2008-02-16 08:19 <a href="http://www.shnenglu.com/longshanks/archive/2008/02/16/42791.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐡︽牸綰崇殑鎺掑満http://www.shnenglu.com/longshanks/archive/2008/02/14/42718.htmllongshankslongshanksThu, 14 Feb 2008 03:25:00 GMThttp://www.shnenglu.com/longshanks/archive/2008/02/14/42718.htmlhttp://www.shnenglu.com/longshanks/comments/42718.htmlhttp://www.shnenglu.com/longshanks/archive/2008/02/14/42718.html#Feedback1http://www.shnenglu.com/longshanks/comments/commentRss/42718.htmlhttp://www.shnenglu.com/longshanks/services/trackbacks/42718.html鐡︽牸綰崇殑鎺掑満     榪欎釜鏄ヨ妭榪囩殑瀹炲湪鏃犺叮銆傝蛋瀹屼翰鎴氾紝鎷涘緟瀹屼翰鎴氾紝閫涜涔板ソ涓滆タ錛屽氨娌″灝戞椂闂翠簡銆傜湅涔︾殑鍏磋嚧涔熸病浜嗐傛兂鍐欑偣浠涔堬紝鎬繪槸娌℃硶闆嗕腑綺懼姏銆傚疄鍦ㄨ吇鍛充簡錛屾妸浠ュ墠涓嬭澆鐨勭摝鏍肩撼鐨勬瓕鍓с婂凹浼緳鏍規寚鐜嬫嬁鍑烘潵鐪嬬湅銆傝嚜浠庝笅杞斤紝娌℃庝箞濂藉ソ鐪嬭繃錛岃繖鍥炵畻鏄ˉ涓婁簡銆?br>     鐡︽牸綰崇殑“鎸囩幆”緋誨垪鍙互綆楁槸姝屽墽閲岀殑鏋佸搧錛屾誨叡鍥涘嚭錛氳幈鑼甸粍閲戙佸コ姝︾銆侀綈鏍間經闆峰痙鍜屼紬紲炵殑榛勬槒銆傚垎鎴愬洓涓櫄涓婅繛婕旓紝鎬誨叡鍔犺搗鏉ュぇ綰?5涓皬鏃躲備笉璇村埆 鐨勶紝閲岄潰鐨勮鑹蹭紬澶氾紝鍏夌灝辨湁8涓紝浜烘湁7涓紝濂蟲紲?涓紝灝間集榫欐牴鐭漢2涓紝榪樻湁涓変釜浠欏コ銆?涓法浜猴紝鍜屼竴鍙皬楦燂紙鍦ㄥ悗鍙扮殑濂抽珮闊籌級銆傛儏鑺傞敊緇煎鏉傦紝闊? 涔愭洿鏄畯澶с傝祫鏂欎笂璇達紝榪欓儴姝屽墽涓湁200澶氫釜鍔ㄦ満緇勫悎銆佷氦緇囧湪涓璧楓備笉榪囷紝榪欒繕涓嶈兘琛ㄧ幇鍑虹摝鏍肩撼鍦ㄩ煶鍝嶄笂榪戜箮鍙樻佺殑榪芥眰銆傛寚鐜郴鍒楄姹備竴涓秴榪?00浜? 搴炲ぇ鐨勪箰鍥紝騫朵笖寮曞叆浜嗗嚑縐嶆柊鐨勪箰鍣紝鍖呮嫭 Wagner tuba, bass trumpet鍜宑ontrabass trombone銆傚叾涓紝 Wagner tuba榪樻槸浠栦負榪欓儴姝屽墽涓撻棬鍙戞槑鐨勩傛渶澶稿紶鐨勬槸錛岀摝鏍肩撼涓轟簡鑾峰緱濡傛搴炲ぇ鐨勪箰闃熷悓婕斿憳澹伴煶涔嬮棿鐨勫鉤琛★紝涓撻棬寤洪犱簡涓搴ф瓕鍓ч櫌錛屼篃灝辨槸钁楀悕鐨?font size="-1">鎷滅綏浼婄壒鑺傛棩鍓ч櫌(Bayreuth Festspielhaus)銆傝繖鍦ㄩ煶涔愬彶涓婃槸緇濇棤浠呮湁鐨勩傛鏄敱浜庤繖縐嶉獓浜虹殑鎺掑満錛岄犲氨浜嗘瓕鍓у彶涓婄殑宸呭嘲涔嬩綔銆?br>     榪欏掕鎴戣仈鎯沖埌C++銆傝瀹炲湪鐨勶紝C++鐨勪嬌鐢紝鏈夋椂涔熷悓鐡︽牸綰寵氨鍐欑殑姝屽墽閭f牱錛岄潪甯稿鏉傘佸簽澶э紝闇瑕佸ぇ閲忕殑鎶曞叆錛屽拰鍓嶆湡鍑嗗銆傛湁鏃訛紝涓轟簡涓浜涘簲鐢紝鑰屽幓鏋勯犱竴浜涚殑鍩虹璁炬柦錛堝氨鍍?/font>鎷滅綏浼婄壒鑺傛棩鍓ч櫌錛夈傝繖縐嶅簽澶у鑷翠簡搴旂敤闈㈢殑鐙獎錛屼絾鏄嵈鑳藉鑾峰緱鏋佸搧鑸殑涓滆タ銆傝繖縐嶄笢瑗垮綋鐒朵笉浼氭槸鍒板閮芥湁錛屼絾鍗存槸寮哄ぇ鐨勩佷紵澶х殑錛屼互鍙婂叧閿х殑銆?br>     褰撶劧錛屾帓鍦轟粎浠呮槸琛ㄩ潰鐨勪笢瑗匡紝鐪熸鍚稿紩浜虹殑錛岃繕鏄摝鏍肩撼鐨勯煶涔愩傛瓕鍓у湪鐡︽牸綰蟲墜閲岋紝涓嶅啀鏄竴緋誨垪鐨勫拸鍙硅皟銆傜摝鏍肩撼鏄湪鐢ㄩ煶涔愯鏁呬簨銆傞煶涔愭槸姝屽墽鐨勪竴閮ㄥ垎錛? 姝屽敱鏄煶涔愮殑涓閮ㄥ垎錛屽竷鏅佺伅鍏夊拰鑸炲彴鏁堟灉閮芥槸涓嶅彲鍒嗗壊鐨勪竴鍒嗗瓙銆傛墍鏈夎繖浜涙槸涓涓暣浣擄紝闄や簡涓埆鍑哄僵鐨勪箰孌碉紙鍩烘湰涓婂彧鏈?#8220;椋為┌鐨勫コ姝︾”榪欎竴孌碉紝鏇捐鐢ㄥ湪 鐢靛獎“鐜頒唬鍚ず褰?#8221;涓級錛屽緢灝戝崟鐙紨濂忋傚畠浠垙鍓фуお寮轟簡錛岃劚紱諱簡姝屽墽錛屽氨浠呬粎鏄竴鍫嗛煶絎﹁屽凡銆?br>     榪欎竴鐐逛笂錛孋++涔熸槸濡傛錛岃璦銆佸簱銆佹儻鐢ㄦ硶絳夌瓑錛岄兘鏄暣浣擄紝涓鏃︾浉浜掕劚紱伙紝渚挎棤娉曞彂鎸ュ簲鏈夌殑浣滅敤銆傛墍浠ュ绔嬪湴榪愮敤C++鏌愪竴鏂歸潰鐨勭壒鎬э紝寰寰浼氳鍏ユ閫旓紝鍙湁緇煎悎榪愮敤鍚勭鎵嬫錛屾墠鑳界湡姝e湴鐢ㄥソC++銆?br>     鐡︽牸綰沖簽澶у鏉傚拰鑾墡鐗圭殑綆媧佷紭闆呭艦鎴愪簡椴滄槑鐨勫姣斻備絾鏄垜浠笉鑳借鑾墡鐗規瘮鐡︽牸綰蟲洿濂斤紝鎴栬呭弽榪囨潵銆備粬浠殑闊充箰閮芥槸鏈浼熷ぇ鐨勬澃浣滐紝涓涓漢鍙互姣棤鍐茬獊鍦? 鍚屾椂鎴愪負浠栦滑淇╀漢鐨勭矇涓濓紙灝卞儚鎴?)錛夈傛垜浠昏兘浠庝腑鑾峰緱鎯沖儚銆佹濊冦佹濇兂鍜屼雞鐞嗭紝涓よ呴兘鍏峰鏃犳硶鏇夸唬鐨勮惀鍏匯傝鐪熷湴瀛︿範鍜屽惛鏀訛紝鎵嶆槸姝i亾銆?br>     緙栫▼璇█鐨勫涔犲拰浣跨敤錛屽張浣曞皾涓嶆槸濡傛鍛紵

娉細涓ユ牸鍦拌錛岀摝鏍肩撼鐨勮繖浜涗綔鍝佸茍涓嶆槸姝屽墽錛屾湁涓涓寮忕殑鍚嶇О錛歮usic drama錛岀洿鎺ョ炕璇戞槸“闊充箰鎴忓墽”錛屾槸姝屽墽鐨勬墿灞曘備絾鏄負浜嗘柟渚匡紝榪樻槸騫夸箟涓婂湴灝嗗叾縐頒綔姝屽墽銆?br>


]]>
褰揋PL閬囦笂MPhttp://www.shnenglu.com/longshanks/archive/2008/01/25/41892.htmllongshankslongshanksFri, 25 Jan 2008 07:09:00 GMThttp://www.shnenglu.com/longshanks/archive/2008/01/25/41892.htmlhttp://www.shnenglu.com/longshanks/comments/41892.htmlhttp://www.shnenglu.com/longshanks/archive/2008/01/25/41892.html#Feedback4http://www.shnenglu.com/longshanks/comments/commentRss/41892.htmlhttp://www.shnenglu.com/longshanks/services/trackbacks/41892.html褰揋PL閬囦笂MP

鑾崕鏋?/p>

    GPL錛屼篃灝辨槸General Purpose Language錛屾槸鎴戜滑浣跨敤鐨勬渶澶氱殑涓綾昏璦銆備紶緇熶笂錛孏PL鐨勮娉曪紝鎴栬呯壒鎬э紝鏄浐鎬佺殑銆傜劧鑰岋紝紼嬪簭鍛橀兘鏄仾鏄庝漢錛堝嵆渚跨畻涓嶄笂“鏈鑱槑”錛屼篃綆楀緱涓?“寰堣仾鏄?#8221;鍚?)錛夛紝寰寰涓嶆効鍙楀埌璇硶鐨勬潫緙氾紝璇曞浘鎸夎嚜宸辯殑蹇冩剰“鏀歸?#8221;璇█銆傚疄闄呬笂錛屽嵆渚挎槸鏃╂湡鐨勮璦錛屼篃鎻愪緵浜嗕竴浜涘伐鍏鳳紝渚涜仾鏄庝漢浠帺寮勮娉曘傛垜鐪嬬殑絎竴鏈珻璇█鐨勪功閲岋紝灝辨湁榪欎箞涓涓緥瀛愶紝灞曠ず鍑鴻繖縐?#8220;閭伓”鐨勬墜孌碉細
      #define procedure void
      #define begin {
      #define end }
    鐒跺悗錛?br>      procedure fun(int x)
      begin
          ...
      end
    瀹為檯涓婏紝瀹冪殑鎰忔濇槸錛?br>      void fun(int x)
      {
          ...
      }
    榪欏彲浠ョ湅浣滄槸瀵瑰垵瀛璇█鐨凱ascal紼嬪簭鍛樼殑瀹夋叞銆傝繖縐嶈供鑴氱殑鎴忔硶鍙互綆椾綔鍏冪紪紼嬬殑涓縐嶏紝鍦ㄤ竴縐嶈璦閲屽垱閫犱簡鍙︿竴涓娉曘備笉榪囷紝瀹炲湪鏈変簺鏃犺亰銆傜劧鑰岋紝鍦ㄥ疄闄呭紑鍙戜腑錛屾垜浠垨澶氭垨灝戝湴浼氶渶瑕佷竴浜涜秴鍑鴻娉曡寖鍥寸殑鏈哄埗銆傛湁鏃朵負浜嗗畬鍠勮璦錛屽譏琛ヤ竴浜涚己鎲撅紱鏈夋椂涓轟簡澧炲己涓浜涘姛鑳斤紱鏈夋椂涓轟簡鑾峰緱涓浜涙柟渚褲傛洿鏂版疆鐨勶紝鏄瘯鍥懼湪涓縐岹PL閲屾瀯寤篋omain Specific Language錛屾垨鑰呰“瀛愯璦”錛屼互鑾峰緱鏌愪釜鐗規ч鍩熶笂鏇寸洿瑙傘佹洿綆媧佺殑緙栫▼鏂瑰紡銆傝繖浜涘璇█鐨勬墿灞曢渶姹傜殑瀹炵幇錛屼緷璧栦簬琚О涓篗eta- Programming錛圡P錛夌殑鎶鏈?br>    鍙︿竴鏂歸潰錛岄殢鐫璇█鍔熻兘鍜岀壒鎬х殑涓嶆柇澧炲姞錛岃秺鏉ヨ秺澶氱殑浜哄紑濮嬫姳鎬ㄨ璦澶鏉傘備竴鏂歸潰錛?#8220;闅鵑亾鎴戜滑浼氶渶瑕侀偅浜涗竴杈堝瓙涔熺敤涓嶅埌鍑犲洖鐨勮璦鏈哄埗錛屾潵澧炲姞璇█鐨勫鏉傛у拰瀛︿範浣跨敤鑰呯殑璐熸媴鍚楋紵”銆傚彟涓鏂歸潰錛?#8220;鏈夊鏃犳偅錛屼竴涓璦鏈哄埗瑕佸埌榪湪鐪夌潾鐨勬椂鍊欐墠鍘昏冭檻鍚楋紵”銆備絾MP鎶鏈垯灝嗚繖瀵圭煕鐩炬秷寮簬鏃犲艦銆備竴縐嶈璦錛屽彲浠ョ畝媧佸埌鍙渶鏈鍩烘湰鐨勪竴浜涚壒鎬с傝屽叾浠栫壒瀹氱殑璇█鍔熻兘闇姹傦紝鍙互閫氳繃MP鍔犱互鎵╁睍銆傚鏋滀笉闇瑕佹煇縐嶇壒鎬э紝閭d箞鍙涓嶅姞杞界浉搴旂殑MP浠g爜鍗沖彲錛岃屾棤闇涓洪偅浜涙満鍒惰岀儲鎭箋?br>    MP鏈璇變漢鐨勫湴鏂癸紝鑾繃浜庢垜浠彲浠ラ氳繃緙栧啓涓涓唬鐮佸簱渚夸嬌寰楄璦鍏峰浠ュ線娌℃湁鐨勭壒鎬с?br>    鐒惰岋紝鍏ㄩ潰鐨凪P鑳藉姏寰寰甯︽潵宸ㄥぇ鐨勫壇浣滅敤錛屼互鑷充簬鎴戜滑鏃犳硶鐭ラ亾鍒板簳鏄ソ澶勬洿澶氾紝榪樻槸鍓綔鐢ㄦ洿澶氥傝璦鐨勯殢鎰忔墿灞曞線寰甯︽潵鏌愪簺鍗遍櫓錛屾瘮濡傝娉曠殑鍐茬獊鍜屼笉鍏煎錛屽鍩虹璇█鐨勫共鎵幫紝鍏抽敭瀛楃殑娉涙互絳夌瓑銆傛崲鍙ヨ瘽璇達紝MP鏄瓩鎮熺┖錛屾湰棰嗛珮寮恒備絾娌℃湁绱х畭鍜掞紝鏄涓嶄綇浠栫殑銆?br>    閭d箞錛岀揣綆嶅拻鏄粈涔堝憿錛熻繖灝辨槸榪欓噷鎵撶畻鎺㈣鐨勪富棰樸傛湰鏂囨墦綆楅氳繃瑙傚療涓ょ宸插瓨鍦ㄧ殑MP鎶鏈紝鍒嗘瀽瀹冧滑鐨勭壒鐐逛笌緙洪櫡錛屼粠涓壘鍑鴻В鍐抽棶棰樼殑錛堝彲鑳斤級閫斿緞銆?

AST瀹?/h4>

    棣栧厛錛屽厛鏉ョ湅涓涓嬪畯錛岃繖縐嶈繙鍙ゆ椂浠i仐鐣欎笅鏉ョ殑鎶鏈備互鍙婂畠鐨勫悗瑁旓紝ast瀹忋?br>    鍏充簬浼犵粺鐨勫畯鐨凪P鍔熻兘錛屼笂闈㈢殑浠g爜宸茬粡綆鍗曞湴灞曠ず浜嗐備絾鏄紝榪欑鍔熻兘鏄瀬鍏舵湁闄愮殑銆傚畯鏄氳繃鏂囨湰鏇挎崲鐨勫艦寮忥紝鎶婅璦涓殑涓浜涚鍙楓佹搷浣滅銆佸叧閿瓧絳夌瓑鏇挎崲鎴愬彟涓縐嶅艦寮忋傝屽浜庡鏉傜殑璇硶鏋勯犵殑鍒涘緩鏃犺兘涓哄姏銆傞棶棰樼殑鍙︿竴闈紝瀹忓甫鏉ヤ簡寰堝鍓綔鐢ㄣ傜敱浜庡畯鐨勫熀紜鏄枃鏈浛鎹紝鎵浠ュ嚑涔庝笉鍙楄娉曞拰璇箟鐨勭害鏉熴傝屼笖錛屽畯鐨勮皟璇曞洶闅撅紝閫氬父涔熶笉鍙楀懡鍚嶇┖闂寸殑綰︽潫銆傚畠甯︽潵鐨勯夯鐑︼紝寰寰澶氫簬甯︽潵鐨勫ソ澶勩?br>    ast瀹忎綔涓轟紶緇熷畯鐨勫悗緇ц咃紝鍋氫簡鏀硅繘錛屼嬌寰楀畯鍙互鍦╝st錛圓bstract Syntax Tree錛夌粨鏋勪笂鎵ц璇硶鐨勫尮閰嶃傦紙榪欓噷闇瑕佹劅璋?a >TopLanguage涓婄殑Olerev鍏勶紝浠栫敤綆媧佽屽張娓呮櫚鐨勬枃瀛楋紝瀵規垜榪涜浜哸st瀹忕殑鍒濈駭鍩硅:)錛夈傝繖鏍鳳紝渚垮彲浠ュ垱閫犳柊鐨勮娉曪細
      syntax(x, "<->", y, ";")
      {
          std::swap(x, y);
      }
    褰撻亣鍒頒唬鐮侊細
      x <-> y;
    鐨勬椂鍊欙紝緙栬瘧鍣ㄧ敤std::swap(x,y);鍔犱互鏇挎崲銆傚疄闄呬笂錛岃繖鏄皢涓縐嶈娉曠粨鏋勬槧灝勫埌鍙︿竴涓娉曠粨鏋勪笂銆傝宎st瀹忓垯鏄繖縐嶆槧灝勭殑鎵ц鑰呫?br>    浣嗘槸錛宎st瀹忓茍鏈秷闄ゅ畯鏈韓鐨勯偅浜涚己闄楓傚鏋渪鎴栬厃鏈韓涓嶇鍚坰wap鐨勮姹傦紙綾誨瀷鐩稿悓錛屽茍涓旇兘澶嶅埗鏋勯犲拰璧嬪鹼紝鎴栬呮嫢鏈塻wap鎴愬憳鍑芥暟錛夛紝閭d箞 ast瀹忚皟鐢ㄧ殑鏃跺欐棤娉曞姝や綔鍑烘楠屻傚畯閫氬父浠ラ緙栬瘧鍣ㄥ鐞嗭紝ast瀹忓垯灝嗗叾鎺ㄨ繜鍒拌娉曞垎鏋愪箣鏃躲備絾鏄鏃朵緷鐒舵棤娉曞緱鍒皒鎴杫鐨勮涔夌壒寰侊紝鏃犳硶鐩存帴鍦ㄨ皟鐢ㄧ偣緇欏嚭閿欒淇℃伅銆?br>    鍚屾椂錛宎st瀹忚繕鏄棤娉曞鐞嗕簩涔夋х殑璇硶鏋勯犮傚鏋滀竴涓猘st瀹忔墍瀹氫箟鐨勮娉曟瀯閫犱笌涓昏璦錛屾垨鑰呭叾浠朼st瀹忕殑鐩稿悓錛屽垯浼氬紩鍙戞販涔便備絾鏄紝濡傛灉綆鍗曠矖鏆村湴灝嗚繖縐?#8220;閲嶅畾涔?#8221;浣滀負闈炴硶澶勭悊錛岄偅涔堜細澶уぇ緙╁皬ast瀹忥紙浠ュ強MP錛夌殑搴旂敤鑼冨洿銆傚疄闄呬笂錛岃繖縐嶈娉曟瀯閫犵殑閲嶅畾涔夋湁鍏剁幇瀹炴剰涔夛紝鍙互鐪嬩綔涓縐嶈娉曟瀯閫犵殑“閲嶈澆”錛屾垨鑰呭嚱鏁幫紙鎿嶄綔絎︼級閲嶈澆鐨勪竴縐嶆墿灞曘?br>    瑙e喅鐨勬柟娉曞茍涓嶅鏉傦紝灝辨槸涓篴st瀹忓姞涓婄害鏉?/strong>銆傚疄闄呬笂錛岀被浼肩殑鎯呭艦鍦–++98鐨勬ā鏉夸笂涔熷瓨鍦紝鑰孋++鍒欒瘯鍥鵑氳繃涓烘ā鏉挎坊鍔燾oncept綰︽潫鍔犱互瑙e喅銆傝繖縐嶇害鏉熸湁涓や釜浣滅敤錛氬叾涓錛屽湪絎竴鏃墮棿瀵筧st瀹忕殑浣跨敤榪涜姝g‘鎬ф楠岋紝鑰屾棤闇絳夊埌浠g爜灞曞紑涔嬪悗錛涘叾浜岋紝鐢ㄤ互鍖哄垎鍚屼竴涓娉曟瀯閫犵殑涓嶅悓鐗堟湰銆?br>    浜庢槸錛屽浜庝笂榪頒緥瀛愬彲浠ヨ繖鏍鋒柦鍔犵害鏉燂紙榪欎簺浠g爜鍙兘琛ㄨ揪涓涓剰鎬濓紝榪樻棤娉曠湅浣滅湡姝f剰涔変笂鐨凪P璇硶錛夛細
      syntax(x, "<->", y, ";")
           where x,y is object of concept (has_swap_mem or (CopyConstructable and Assignable))
                && typeof(x)==typeof(y)
      {
          std::swap(x,y);
      }
    濡傛錛岄櫎闈瀤錛寉閮芥槸瀵硅薄錛屽茍涓旂鍚堟墍鎸囧畾鐨刢oncept錛屽惁鍒欑紪璇戝櫒浼氬綋鍗沖姞浠ユ嫆緇濓紝鑰屼笖鐩存埅浜嗗綋銆?br>    涓嶈繃錛屽姝ゅ彉鍖栦箣鍚庯紝ast瀹忓皢涓嶄細鍐嶆槸瀹忎簡銆傚洜涓鴻繖縐嶇害鏉熸槸璇箟涓婄殑錛屽繀欏葷瓑鍒拌涔夊垎鏋愰樁孌碉紝鏂硅兘媯楠屻傝繖灝辮秴鍑轟簡瀹忕殑棰嗗湴浜嗐備笉榪囨棦鐒禷st瀹忓彲浠ヤ粠棰勫鐞嗛樁孌墊帹榪熷埌璇硶鍒嗘瀽闃舵錛岄偅涔堝啀鎺ㄨ繜涓涓嬩篃娌″叧緋匯傚啀璇達紝鎴戜滑鍏蟲敞鐨勬槸榪欑鍔熻兘錛屽甫綰︽潫鐨刟st瀹忓埌搴曟槸涓嶆槸瀹忥紝涔熸棤鍏崇揣瑕併?/p>

TMP

    涓嬮潰錛屾垜浠洖榪囧ご錛屽啀鏉ョ湅鐪嬪彟涓縐峂P鎶鏈斺擳MP錛堝弬鑰僁avid Abrahams, Aleksey Gurtovoy鎵钁楃殑銆奀++ Template Metaprogramming銆嬶級銆傚浜嶵MP瀛樺湪棰囧浜夎錛屾敮鎸佽呰涓哄畠鎻愪緵浜嗘洿澶氱殑鍔熻兘鍜岀伒媧繪э紱鍙嶅鑰呰涓篢MP榪囦簬tricky錛岄毦浜庤繍鐢ㄥ拰璋冭瘯銆備笉綆℃庝箞鏍鳳紝TMP鐨勫嚭鐜板悜鎴戜滑灞曠ず浜嗕竴縐嶅彲鑳芥э紝鍗沖湪GPL涓畨鍏ㄥ湴榪涜MP緙栫▼鐨勫彲鑳芥с傜敱浜嶵MP鎵榪愮敤鐨勯兘鏄疌++鏈韓鐨勮璦鏈哄埗錛岃岃繖浜涙満鍒墮兘鏄浉瀹圭殑銆傛墍浠ワ紝TMP鎵鏋勫緩鐨?MP浣撶郴涓嶄細鍚孏PL鍜屽叾浠栧瓙璇█鐨勮娉曟満鍒剁浉鍐茬獊銆?br>    瀹為檯涓婏紝TMP渚濊禆浜嶤++鐨勬ā鏉垮強鍏剁壒鍖栨満鍒舵墍鏋勫緩鐨勭紪璇戞湡璁$畻浣撶郴錛屼互鍙婃搷浣滅鐨勯噸杞藉拰妯℃澘鍖栥備笅闈㈢殑浠g爜鎽樿嚜boost::spirit鐨勬枃妗o細
      group = '(' >> expr >> ')';

      expr1 = integer | group;

      expr2 = expr1 >> *(('*' >> expr1) | ('/' >> expr1));

   expr = expr2 >> *(('+' >> expr2) | ('-' >> expr2));

    榪欓噷琛ㄨ揪浜嗕竴緇凟BNF錛堣娉曠潃瀹炲彜鎬紝榪欏挶寰呬細鍎垮啀璇達級錛?gt;>浠h〃浜嗘爣鍑咵BNF鐨?#8220;followed by”錛?浠h〃浜嗘爣鍑咵BNF鐨?錛堜粠鍙寵竟縐誨埌宸﹁竟錛夛紝鎷彿榪樻槸鎷彿錛寍渚濇棫琛ㄧずUnion銆傞氳繃瀵硅繖浜涙搷浣滅鐨勯噸杞斤紝璧嬩簣浜嗗畠浠柊鐨勮涔夛紙鍗矱BNF鐨勭浉鍏寵涔夛級銆傜劧鍚庨厤鍚堟ā鏉跨殑綾誨瀷鎺ㄥ銆佺壒鍖栫瓑絳夋満鍒訛紝鍙樻垙娉曡埇鍦版瀯閫犲嚭涓涓娉曡В鏋愬櫒錛岃屼笖鏄紪璇戞椂瀹屾垚鐨勩?

    灝界鍦╯pirit涓紝>>銆?銆亅絳夋搷浣滅琚尓浣滀粬鐢紝浣嗘槸鎴戜滑渚濈劧鍙互鍦ㄨ繖浜涗唬鐮佺殑鍓嶅悗宸﹀彸鎻掑叆璇稿錛歝in>> *ptrX;鐨勪唬鐮侊紝鑰屼笉浼氬紩鍙戜換浣曢棶棰樸傝繖鏄洜涓?gt;>絳夋搷浣滅鏄寜鐓т笉鍚岀殑綾誨瀷閲嶈澆鐨勶紝瀵逛簬涓嶅悓綾誨瀷鐨勫璞$殑璋冪敤錛屼細璋冪敤涓嶅悓鐗堟湰鐨勬搷浣滅閲嶈澆錛屼簰涓嶅共鎵幫紝鑰佸皯鏃犳銆?

    浣嗘槸錛孴MP瀛樺湪涓や釜闂銆傚叾涓錛岄敊璇鐞嗕笉瓚熾傚鏋滄垜涓嶅皬蹇冩妸絎簩琛屼唬鐮侀敊鍐欐垚錛歟xpr1 = i | group;錛岃宨鏄竴涓猧nt綾誨瀷鐨勫彉閲忥紝閭d箞緙栬瘧鍣ㄥ線寰浼氱粰鍑轟竴浜涚█濂囧彜鎬殑閿欒銆傛棤闈炲氨鏄綾誨瀷涓嶅尮閰嶄箣綾葷殑錛屼絾鏄緢鏅︽訂銆傝繖鏂歸潰涔熸槸TMP鍙椾漢璇熺梾鐨勪竴涓富瑕佸師鍥犮傚ソ鍦–++0x涓殑concept鍙互瀵規ā鏉夸綔鍑虹害鏉燂紝騫朵笖鍦ㄨ皟鐢ㄧ偣鐩存帴緇欏嚭閿欒鎻愮ず銆傞殢鐫榪欎簺鎶鏈殑寮曞叆錛岃繖鏂歸潰闂灝嗕細寰楀埌緙撹В銆?

    鍏朵簩錛屽彈鍒癈++璇硶浣撶郴鐨勭害鏉燂紝MP鏃犳硶鑷敱鍦版寜鎴戜滑涔犳儻鐨勫艦寮忓畾涔夎娉曟瀯閫犮傚墠闈㈣榪囦簡錛宻pirit鐨凟BNF璇硶涓庢爣鍑咵BNF鏈変笉灝忕殑宸紓錛岃繖瀵逛簬spirit鐨勪嬌鐢ㄩ犳垚浜嗕笉渚褲傚悓鏍鳳紝濡傛灉璇曞浘榪愮敤TMP鍦–++涓瀯閫犳洿楂樼駭鐨凞SL搴旂敤錛岃濡備竴縐嶇敤浜庤璐︾殑甯愬姟澶勭悊璇█錛屽皢浼氶亣鍒版洿澶х殑闄愬埗銆傚疄闄呬笂TMP涓嬬殑DSL涔熷緢灝戞湁浠や漢婊℃剰鐨勩?

    鎵浠ヨ錛孴MP鍦ㄤ嬌鐢ㄤ笂鐨勫畨鍏ㄦф潵婧愪簬鎿嶄綔絎﹀鐢紙鎴栭噸杞斤級鐨勭壒鎬с備絾鏄紝鎿嶄綔絎︽湰韜殑璇硶鐗規ф槸鍥哄畾鐨勶紝榪欎嬌寰椾緷璧栦簬鎿嶄綔絎︼紙娉涘寲鎴栭潪娉涘寲錛夐噸杞界殑TMP涓嶅彲鑳芥垚涓虹湡姝f剰涔変笂鐨凪P鎵嬫銆?

    閭d箞錛屽浜嶵MP鑰岃█錛屾垜浠劅鍏磋叮鐨勬槸瀹冪殑瀹夊叏鎬у拰鐩稿鎬с傝屽鍏朵笉婊$殑錛屽垯鏄娉曟瀯閫犵殑鐏墊椿鎬с傛湰鐫“鍘誨叾緋熺矔錛屽彇鍏剁簿鍗?#8221;鐨勫畻鏃紝鎴戜滑鍙互瀵筎MP鍋氫竴鐣敼榪涳紝浠ヨ幏寰楁洿瀹屾暣鐨凪P鎶鏈俆MP鐨勬牳蹇冭嚜鐒舵槸妯℃澘錛堢被妯℃澘鍜屽嚱鏁?鎿嶄綔絎︽ā鏉匡級錛屽湪concept鐨勫府鍔╀笅錛屾ā鏉垮彲浠ヨ幏寰楁渶濂界殑瀹夊叏鎬у拰鐩稿鎬с備互姝や負鍩虹錛屽鏋滄垜浠皢妯℃澘鎵╁睍鍒拌娉曟瀯閫犱笂錛岄偅涔堜究鍙互鍦ㄤ繚鐣橳MP鐨勫畨鍏ㄦу拰鐩稿鎬х殑鎯呭喌涓嬶紝鑾峰緱鏇村ぇ鐨勮娉曠伒媧繪с備篃灝辨槸璇達紝鎴戜滑闇瑕佸鍔犱竴縐嶆ā鏉庫斺?strong>璇硶妯℃澘錛?

      template<typename T>
      syntax synSwap=x "<->" y ";"
         require SameType<decltype(x), T> && SameType<decltype(y), T>
                && (has_swap_mem<T> || (CopyConstructable<T> and Assignable<T>)
      {
          std::swap(x, y);
      }

    榪欓噷鎴戞潨鎾頒簡鍏抽敭瀛梥yntax錛屽茍涓斿厑璁鎬負璇硶鏋勯犲懡鍚嶏紝渚夸簬浣跨敤銆傝岃娉曟瀯閫犳弿榪幫紝鍒欐槸絳夊彿鍚庨潰鐨勯儴鍒嗐俽equire娌跨敤鑷狢++0x鐨刢oncept鎻愭銆傜◢浣滀簡浜涙敼閫狅紝鍏佽concept涔嬮棿鐨剕|銆?

鐢ㄦ埛瀹氫箟鐨勮娉?/strong>

    濡傛灉姣旇緝甯︾害鏉熺殑ast瀹忓拰璇硶妯℃澘錛屼細鍙戠幇鏋佸叾鐩鎬技銆傚疄闄呬笂錛屼袱鑰呮畩閫斿悓褰掞紝灞曠ず浜嗗嚑涔庡畬鍏ㄧ浉鍚岀殑涓滆タ銆俛st瀹忓拰TMP鍒嗗埆浣嶄簬鍚屼竴涓棶棰樼殑涓ょ錛屽綋瀹冧滑鐨勭己闄峰緱鍒板譏琛ユ椂錛屼究浼氱浉浜掗潬鎷紝鏈緇堝綊緇撳埌涓縐嶅艦寮忎笂銆?nbsp;

    鐜板湪錛岄氳繃緇撳悎涓ょ鏂規鐨勭壒鑹詫紝鎴戜滑渚垮彲浠ュ緱鍒頒竴涓渶緇堢殑MP鏋勯狅紝鏃㈠畨鍏紝鍙堢伒媧伙細

      syntax synSwap=x "<->" y ";";

      where

          (x,y is object)

          && SameType<x, y>

          && (has_swap_mem<x> || (CopyConstructable<x> and Assignable<x>))

      {

          std::swap(x, y);

      }

    鎴戝幓鎺変簡template鍏抽敭瀛楋紝鍦ㄧ害鏉?where)鐨勪綔鐢ㄤ笅錛宼emplate鍜岀被鍨嬪弬鏁板垪琛ㄩ兘宸茬粡娌℃湁蹇呰浜嗐傚悓鏃訛紝涔熷厑璁哥洿鎺ュ皢瀵硅薄鏀懼叆 concept錛欰ssignable<x>錛岃繖鐩稿綋浜庯細Assignable<decltype<x>>銆?

    “is ...”鏄壒鍒殑綰︽潫錛岀敤鏉ユ弿榪伴偅浜涜秴瓚奵oncept鑼冪暣鐨勭壒鎬с?#8220;...”鍙互鏄叧閿瓧“object”錛岃〃鏄庣浉搴旂殑鏍囪瘑絎︽槸瀵硅薄錛涗篃鍙互鏄叧閿瓧 “type”錛岃〃鏄庣浉搴旂殑鏍囪瘑絎︽槸綾誨瀷錛涙垨鑰呮槸鍏抽敭瀛?#8220;concept”錛屾寚瀹氱浉搴旂殑鏍囪瘑絎︽槸concept絳夌瓑銆傛搷浣滅鐨勯噸杞芥墍娑夊強鐨勫弬鏁板彧浼氭槸瀵硅薄錛屽彧闇瀵瑰叾綾誨瀷鍋氬嚭綰︽潫錛屽洜姝oncept渚胯凍澶熶嬌鐢ㄣ備絾璇硶鏋勯犵殑瀹氫箟鍒欏箍澶х殑澶氾紝瀹冧笉浠呬粎浼氭秹鍙婂璞★紝鏇村彲鑳芥秹鍙婂叾瀹冪被鍨嬬殑璇硶瑕佺礌銆傚疄闄呬笂錛岃娉曟瀯閫犳墍闈㈠鐨勫弬鏁版槸“鏍囪瘑絎?#8221;銆傞偅涔堜竴涓爣璇嗙涓婂彲鑳藉叿澶囩殑鍚勭鐗規э紝閮藉簲褰撲綔涓虹害鏉熺殑鍐呭銆傝繖閲屽ぇ鑷村綊綰沖嚭浠ヤ笅鍑犵偣闇瑕佺害鏉熺殑鐗規э細

  1. 鍒嗙被銆傚璞°佺被鍨嬨乧oncept銆佸嚱鏁扮瓑絳夈俰s ...錛?
  2. 鏉ユ簮銆傛潵鑷摢涓猲amespace銆俧rom ...錛?
  3. 灝哄銆傜被鍨嬪ぇ灝忋俿izeof(x)>20錛?
  4. 浠庡睘銆傛寚瀹氫竴涓娉曟瀯閫犳槸鍚︿粠灞炰簬鍏朵粬璇硶鏋勯狅紙鍏朵粬璇硶鏋勯犵殑涓閮ㄥ垎錛夈傚鏋滄槸浠庡睘璇硶鏋勯狅紝閭d箞灝嗕笉鑳藉崟鐙嚭鐜板湪鐙珛鐨勮鍙ヤ腑銆傛洿榪涗竴姝ワ紝鍙互寮鴻鎸囧畾涓涓娉曟瀯閫犱粠灞炰簬鏌愪釜璇硶鏋勯狅紝涓嶅厑璁稿湪鍏朵粬璇硶鏋勯犱腑浣跨敤銆俠elong_to ...錛?
  5. 綾誨瀷鍙婂璞¢棿鐨勫叧緋匯傝濡傜戶鎵褲佸瓙瀵硅薄銆佸瓙綾誨瀷銆乼rue typedef銆佸埆鍚嶃佹垚鍛樼瓑絳夈?
  6. ...

    涔熷彲浠ヨ涓猴紝璇硶鏋勯犵殑綰︽潫鏄痗oncept鐨勮嚜鐒跺歡浼搞俢oncept瀵圭被鍨嬪仛鍑虹害鏉燂紝鑰岃娉曟瀯閫犵殑綰︽潫鐨勫璞★紝鍒欐槸鏍囪瘑絎︺?

    涓轟簡寮哄寲璇硶鏋勯犵殑鍒涘緩鑳藉姏錛屽簲褰撳厑璁稿湪璇硶鏋勯犵殑瀹氫箟涓嬌鐢˙NF錛屾垨鍏朵粬綾諱技鐨勮娉曟弿榪拌璦銆?

    鍦ㄨ娉曟瀯閫犵害鏉熺殑鏀彺涓嬶紝渚垮彲浠ュ寲瑙d竴浜涘瓙璇█鍚屽涓昏璦涔嬮棿鐨勮娉曞啿紿併傛瘮濡傦紝鎴戜滑鍒涘緩浜嗕竴縐嶇被浼約pirit鐨凟BNF瀛愯璦錛屽彲浠ユ寜鐓ф爣鍑嗙殑EBNF褰㈠紡緙栧啓璇硶錛屾瀯閫犱竴涓娉曡В鏋愬櫒錛?

      syntax repeat1=p '+'

      where

          p is object of type(Parser)

      {...}

    榪欐牱渚垮畾涔変簡涓涓悗緙褰㈠紡鐨?鎿嶄綔絎︼紝浣嗕粎浠呬綔鐢ㄤ簬綾誨瀷Parser鐨勫璞′笂銆傚浜庡涓嬬殑浠g爜錛?

      letter + number

    浣跨敤涓昏璦鐨?錛堝姞錛夛紝榪樻槸浣跨敤EBNF鐨?錛堥噸澶嶏紝鑷沖皯涓嬈★級錛屽彇鍐充簬letter鍜宯umber鐨勭壒寰侊紙榪欓噷鏄被鍨嬶級錛?

      int letter, number;

      letter + number; //浣跨敤涓昏璦鐨?錛岃〃紺簂etter鍔爊umber

      Parser letter, number;

      letter + number; //浣跨敤EBNF鐨?錛岃〃紺轟竴涓瞝etter鍚庨潰璺熶竴涓猲umber

    濡傛錛屼究浣垮緱鐢ㄦ埛瀹氫箟鐨勮娉曚笉浼氬悓涓昏璦鐨勭浉鍚岃娉曞彂鐢熷啿紿併?

    浣嗘槸錛岃娉曟瀯閫犵殑綰︽潫騫朵笉鑳藉畬鍏ㄦ秷闄ゆ墍鏈夌殑璇硶鍐茬獊銆傚叾涓竴縐嶆儏鍐典究鏄父閲忕殑浣跨敤銆傛瘮濡傦細

      'x' + 'y'

    瀹冨湪瀹夸富璇█涓紝浼氳璇嗗埆涓轟袱涓瓧絎︾殑鐩稿姞銆備絾鍦˙NF瀛愯璦涓紝鍒欎細鏄嫢騫蹭釜瀛楃'x'涔嬪悗绱ц窡涓涓?#8216;y'銆傜敱浜庢病鏈夌被鍨嬨佸璞$瓑浠g爜瀹炰綋鐨勫弬涓庯紝緙栬瘧鍣ㄦ棤娉曞垎杈ㄤ嬌鐢ㄥ摢縐嶈璦鐨勮娉曡鍒欐潵澶勭悊銆傝В鍐崇殑鏂規硶鏄嬌寰楀父閲忕被鍨嬪寲銆傝繖縐嶅仛娉曞湪C++絳夎璦涓凡緇忚繍鐢ㄥ騫淬傞氬父閲囩敤涓哄父閲忓姞鍓嶅悗緙錛?

      'x'b_ + 'y'b_

    浠ユ浠h〃BNF瀛愯璦鐨勫父閲忋傚父閲忕殑璇硶瀹氫箟鍙互鏄細

      syntax bnf_const="'" letter "'" "b_";

      where

          is const of ... //...鍙互鏄煇縐嶇被鍨?

      {...}

    閫氳繃is const of綰︽潫錛屽皢鎵瀹氫箟鐨勫父閲忎笌鏌愪釜綾誨瀷緇戝畾銆傝岄氳繃綾誨瀷錛岀紪璇戝櫒渚垮彲浠ユ帹鏂嚭搴斿綋浣跨敤閭g璇硶瀵瑰叾澶勭悊銆?

    鐒惰岋紝灝界甯︾害鏉熺殑璇硶鏋勯犲畾涔夊彲浠ュ湪寰堝ぇ紼嬪害涓婃秷闄よ娉曞啿紿佸拰姝т箟錛屼絾涓嶅彲鑳芥秷闄ゆ墍鏈夌殑璇硶鐭涚浘銆傚彟涓鏂歸潰錛岀粨鏋勭浉浼鹼紝浣嗚涔夊畬鍏ㄤ笉鍚岀殑璇硶鏋勯犳販鍚堝湪涓璧鳳紝鍗充究涓嶅紩鍙戠煕鐩撅紝涔熶細瀵逛嬌鐢ㄨ呴犳垚闅句互棰勮鐨勬販涔便傚洜姝わ紝鍦ㄥ疄闄呯幆澧冧笅錛岄渶瑕侀氳繃鏌愮“璇硶鍥存爮”涓ユ牸闄愬畾鏌愮鐢ㄦ埛瀹氫箟璇硶鐨勪綔鐢ㄨ寖鍥淬傛渶鐩存帴鐨勫艦寮忥紝灝辨槸閫氳繃namespace瀹炵幇銆俷amespace鍦ㄩ殧紱誨拰鍗忚皟鍛藉悕鍐茬獊涓搗鍒板緢濂界殑浣滅敤錛屽彲浠ヨ繘涓姝ュ皢鍏惰繍鐢ㄥ埌MP涓傜敱浜巒amespace涓緇忔墦寮錛屽叾浣滅敤鑼冨洿涓嶄細瓚呭嚭鏈鍐呭眰鐨勪唬鐮佸潡浣滅敤鍩燂細

      {

          using namespace XXX;

          ...

      } //XXX鐨勪綔鐢ㄨ寖鍥翠笉浼氳秴鍑鴻繖涓寖鍥?

    榪愮敤榪欎釜鐗規э紝鍙互寰堣嚜鐒跺湴灝嗚暣钘忓湪涓涓猲amespace涓殑鐢ㄦ埛瀹氫箟璇硶鏋勯犻檺鍒跺湪涓涓‘瀹氱殑鑼冨洿鍐呫?

    浣嗘槸錛屼粎姝や笉澶熴傛瘯绔熻娉曚笉鍚屼簬鍛藉悕錛屼笉浠呬細瀛樺湪鍐茬獊錛岃繕浼氬瓨鍦紙鍚堟硶鐨勶級娣鋒穯錛岃屼笖寰寰鏄潪甯稿嵄闄╃殑銆備負姝わ紝闇瑕佸厑璁稿湪using namespace鐨勬椂鍊欒繘涓姝ユ寚瀹氳娉曠殑鎺掍粬鎬с傛瘮濡傦細

      {

          using namespace XXX exclusive;

          ...

      }

    濡傛灉namespace涓殑鐢ㄦ埛瀹氫箟璇硶涓庡閮ㄨ娉曪紙瀹夸富璇█錛屾垨澶栧洿寮曠敤鐨刵amespace錛夐噸鍙狅紙鍐茬獊鎴栨販娣嗭級錛屽閮ㄨ娉曞皢琚睆钄姐傛洿榪涗竴姝ワ紝鍙互鍏佽涓嶅悓綰у埆鐨勬帓浠栵細鎺掓枼閲嶅彔鍜屽畬鍏ㄥ睆钄姐傚墠鑰呭彧灞忚斀閲嶅彔鐨勮娉曪紝榪欑綰у埆閫氬父鐢ㄤ簬鎵╁睍鎬х殑鐢ㄦ埛璇硶鏋勯狅紙鎵╁睍涓昏璦錛岄渶瑕佸悓涓昏璦鍗忓悓宸ヤ綔銆傝屼笖璇硶閲嶅彔杈冨皯錛夛紱鑰屽悗鑰呭垯灝嗗閮ㄨ娉曠粺緇熷睆钄斤紝鍙繚鐣欐墍鎵撳紑鐨刵amespace涓殑璇硶錛堝瓙璇█鍦ㄤ唬鐮佸潡涓槸鍞竴璇█錛夛紝榪欑綰у埆鐢ㄤ簬鐩稿鐙珛鐨勫姛鑳芥у瓙璇█錛堝彲浠ョ嫭绔嬪伐浣滅殑瀛愯璦錛岄氬父浼氫笌涓昏璦鍜屽叾浠栧瓙璇█闂村瓨鍦ㄨ緝澶х殑璇硶閲嶅彔錛屾瘮濡備笂榪癇NF瀛愯璦絳夌瓑錛夈?

    涓烘彁渚涙洿澶氱殑鐏墊椿鎬э紝鍙互鍦ㄥ畬鍏ㄥ睆钄界殑鎯呭喌涓嬶紝閫氳繃鐗瑰畾璇彞寮曞叆鏌愮涓嶄細寮曞彂鍐茬獊鐨勫閮ㄨ娉曘傛瘮濡傦細

      {

          using namespace XXX exclusive full;

          using host_lang::syntax(...); //寮曞叆涓昏璦鐨勬煇涓娉曪紝...浠h〃璇硶鍚嶇О

          ...

      }

    閫氬父鎯呭喌涓嬶紝瀛愯璦涓嶄細瀹屽叏鐙珛榪愪綔錛岄渶瑕佸悓瀹夸富璇█鎴栧叾浠栧瓙璇█浜や簰錛屼篃灝辨槸鏁版嵁浜ゆ崲銆備富璇█浠g爜鍙兘闇瑕佸皢鏁版嵁瀵硅薄浼犻掔粰瀛愯璦錛屽鐞嗗畬鎴愬悗鍐嶅彇鍥炪傜敱浜庣紪璇戝櫒渚濊禆浜庢爣璇嗙鐨勭壒鎬э紙涓昏鏄被鍨嬶級鏉ラ夋嫨璇硶鏋勯犮傛墍浠ワ紝涓縐嶅瓙璇█蹇呴』浣跨敤鍏跺唴閮ㄥ畾涔夌殑綾誨瀷鍜屽璞°備負浜嗚兘澶熶氦鎹㈡暟鎹紝蹇呴』鑳藉鎶婁富璇█鐨勫璞″寘瑁呮垚瀛愯璦鐨勫唴閮ㄧ被鍨嬨傞氳繃鍦ㄥ瓙璇█鐨刵amespace涓繘琛宼rue typedef錛屽彲浠ュ皢涓昏璦綾誨瀷瀹氫箟鎴愪竴涓柊鐨勶紙鐪燂級綾誨瀷錛屽湪榪涘叆瀛愯璦浣滅敤鍩熺殑鏃跺欙紝鍋氭樉寮忕殑綾誨瀷杞崲銆傚彟澶栵紝涓轟簡鏂逛究鏁版嵁杞崲錛岃繕鍙互閲囩敤涓ょ鏂規硶錛氬皢涓昏璦綾誨瀷map鍒頒竴涓瓙璇█綾誨瀷錛堢浉褰撲簬緇欎簣“鍙岄噸鍥界睄”錛夛紝榪涘叆瀛愯璦鐨勮娉曡寖鍥存椂錛岀浉搴旂殑瀵硅薄鍦ㄧ被鍨嬩笂鍏鋒湁涓ら噸鎬э紝鍙互琚嚜鍔ㄨ瘑鍒垚鎵闇鐨勭被鍨嬶紝浣嗗繀欏誨湪紜繚涓嶅彂鐢熻娉曟販娣嗙殑鎯呭喌涓嬩嬌鐢紱鍙︿竴縐嶇ǔ濡ヤ簺鐨勬柟娉曪紝鍙互鍏佽鎵ц涓縐峵ypedef錛屼粙浜巃lias鍜宼rue typedef涔嬮棿錛屽畠瀹氫箟浜嗕竴涓柊綾誨瀷錛屼絾鍙互闅愬紡鍦板悓鍘熸潵鐨勭被鍨嬬浉浜掕漿鎹€傛暟鎹氦鎹㈢殑闂杈冨鏉傦紝寰堝闂灝氭湭鐞嗘竻錛屾湁寰呰繘涓姝ヨ冨療銆?

鎬葷粨

    浣滀負MP鎵嬫錛宎st瀹忔嫢鏈夌伒媧繪э紝鑰孴MP鍒欏叿澶囧畨鍏ㄦэ紝灝嗕袱鑰呭悇鑷殑浼樼偣鐩哥粨鍚堬紝浣挎垜浠彲浠ヨ幏寰楁洿鍔犵伒媧誨拰瀹夊叏鐨勮娉曟瀯閫犲畾涔夋墜孌點傞氳繃鍦ㄧ敤鎴峰畾涔夌殑璇硶鏋勯犱笂鏂藉姞鍏ㄩ潰鐨勭害鏉燂紝鍙互寰堝ソ鍦拌閬胯娉曞啿紿佸拰姝т箟銆?

    浣嗘槸錛岄渶瑕佽鏄庣殑鏄紝榪欓噷鎵鑰冨療鐨勪粎浠呭眬闄愬湪鐢ㄦ埛瀹氫箟璇硶鏋勯犵殑鍐茬獊鍜屾涔夌殑娑堥櫎涓娿侴PL/MP瑕佺湡姝h揪鍒板疄鐢ㄩ樁孌碉紝榪橀渶瑕侀潰瀵規洿澶氶棶棰樸傛瘮濡傦紝鐢變簬瀛樺湪鐢ㄦ埛瀹氫箟鐨勮娉曟瀯閫狅紝璇硶鍒嗘瀽闃舵鎵闈㈠鐨勮娉曚笉鏄浐鎬佺殑錛岄渶瑕侀殢鏃墮殢鍦版帴鍙楁柊璇硶錛岀敋鑷抽噸鍙犵殑璇硶錛堝瓨鍦ㄥ涓欓夎娉曪紝涓嶅悓鐨勫欓夎娉曞張浼氫駭鐢熶笉鍚岀殑涓嬬駭璇硶錛夛紝榪欏氨浣胯娉曞垎鏋愬ぇ澶у鏉傦紱璇硶妯″紡鍖歸厤琚帹榪熷埌璇箟鍒嗘瀽闃舵錛屾鍓嶅皢鏃犳硶瀵規煇浜涜娉曢敊璇綔鍑烘楠岋紱涓涓娉曟瀯閫犵殑璇箟闇瑕侀氳繃瀹夸富璇█瀹氫箟錛屽浣曡鎺ュ畾涔変唬鐮佸拰鍛ㄨ竟鐨勭幆澧冨拰鐘舵侊紱濡備綍涓虹敤鎴峰畾涔夌殑璇硶鏋勯犺緗嚭閿欎俊鎭紱鐢變簬鏌愪簺璇硶鏋勯犵殑浜屼箟鎬э紝濡備綍鍒ゅ埆璇硶閿欒灞炰簬鍝釜璇硶鏋勯狅紱...銆傛澶栬繕鏈変竴浜涙洿鏈川鎬х殑闂錛岃濡傝娉曟瀯閫犵殑閲嶈澆鍜屼簩涔夋ф槸鍚︿細鏇村鏄撹浣夸嬌鐢ㄨ呬駭鐢熸洿澶氱殑閿欒絳夌瓑錛岀壍娑夊埌閿欑患澶嶆潅鐨勯棶棰橈紝闇瑕佹洿澶氱殑鍒嗘瀽鍜岃瘯楠屻?

    鍙﹀錛屼綔涓篗P鐨勯噸瑕佺粍鎴愰儴鍒嗭紝緙栬瘧鏈熻綆楄兘鍔涗篃鑷沖叧閲嶈銆俆MP榪愮敤浜咰++妯℃澘鐗瑰寲錛孌璇█閫氳繃鏇存槗浜庣悊瑙g殑static_if絳夋満鍒訛紝閮借瘯鍥捐幏寰楃紪璇戞湡鐨勮綆楄兘鍔涳紝榪欎簺鏈哄埗鍦ㄥ畬鏁寸殑MP涓渶瑕佽繘涓姝ユ墿灞曪紝鑰屽茍闈炰粎浠呭眬闄愬湪涓庣被鍨嬬浉鍏崇殑璁$畻涓娿傚叾浠栦竴浜涗笌姝ょ浉鍏崇殑鐗規э紝鍖呮嫭鍙嶅皠錛堢紪璇戞湡鍜岃繍琛屾湡錛夈佺被鍨媡raits絳夛紝涔熷簲浣滀負MP蹇呬笉鍙皯鐨勭壒鎬с?



]]>
GP鎶鏈殑灞曟湜&mdash;&mdash;閬撶敓涓錛屼竴鐢熶簩http://www.shnenglu.com/longshanks/archive/2008/01/06/40571.htmllongshankslongshanksSun, 06 Jan 2008 09:17:00 GMThttp://www.shnenglu.com/longshanks/archive/2008/01/06/40571.htmlhttp://www.shnenglu.com/longshanks/comments/40571.htmlhttp://www.shnenglu.com/longshanks/archive/2008/01/06/40571.html#Feedback7http://www.shnenglu.com/longshanks/comments/commentRss/40571.htmlhttp://www.shnenglu.com/longshanks/services/trackbacks/40571.html

GP鎶鏈殑灞曟湜鈥斺旈亾鐢熶竴錛屼竴鐢熶簩

by  鑾崕鏋?span style="font-size: 8pt;">



    闀挎湡浠ユ潵錛屾垜浠緇堟妸GP錛堟硾鍨嬬紪紼嬶級浣滀負涓縐嶈緟鍔╂妧鏈紝鐢ㄤ簬綆鍖栦唬鐮佺粨鏋勩佹彁楂樺紑鍙戞晥鐜囥備粠鏌愮紼嬪害涓婃潵璁詫紝榪欑瑙傚康鏄鐨勩傚洜涓鴻縿浠婁負姝紝GP鎶鏈繕鍙槸涓縐嶇紪璇戞湡鎶鏈傚彧鑳藉湪緙栬瘧鏈熷彂鎸ヤ綔鐢紝涓鏃﹁蔣浠跺畬鎴愮紪璇戯紝鎴愪負鍙墽琛屼唬鐮侊紝渚垮け鍘諱簡鍒╃敤GP鐨勬満浼氥傚浜庣幇鍦ㄧ殑澶氭暟搴旂敤鑰岃█錛岃繍琛屾椂鐨勫鎬佽兘鍔涙樉寰楀挨涓洪噸瑕併傝岀幇鏈夌殑GP鏃犳硶鍦ㄨ繖涓眰闈㈠彂鎸ヤ綔鐢紝浠ヨ嚦浜庢垜榪欎釜“GP榪?#8221;涔熶笉寰椾笉鐏版簻婧滃湴澹扮О“鐢∣OP鏋勫緩緋葷粺錛岀敤GP浼樺寲浠g爜”銆?br>

    鐒惰岋紝涓嶄箙鍓嶏紝鍦═opLanguage group涓婄殑涓嬈¤璁猴紝淇冧嬌鎴戜滑娉ㄦ剰鍒皉untime GP榪欎釜姒傚康銆備粠涓紝鎴戜滑鐪嬪埌浜嗗笇鏈涒斺斾嬌GP runtime鍖栫殑甯屾湜鈥斺斾嬌寰桮P鏈夋湜鍦ㄨ繍琛屾椂鍙戞尌鍏跺法澶х殑濞佸姏錛岃繘涓姝ヤ負杞歡鐨勮璁′笌寮鍙戝甫鏉ユ洿楂樼殑鏁堢巼鍜屾洿鐏墊椿鐨勭粨鏋勩?br>    鍦ㄨ繖涓柊鐨勭郴鍒楁枃绔犱腑錛屾垜璇曞浘榪愮敤runtime GP瀹炵幇涓浜涚畝鍗曪紝浣嗗吀鍨嬬殑妗堜緥錛屾潵媯嫻媟untime GP鐨勮兘鍔涘拰闄愬埗錛屽悓鏃朵篃鍙互榪涗竴姝ユ帰璁ㄥ拰灞曠ず榪欑鎶鏈殑鐗規с?

榪愯鏃跺鎬?/h3>     鐜板湪鐨勫簲鐢ㄤ晶閲嶄簬浜や簰寮忕殑榪愪綔褰㈠紡錛岃姹傝蔣浠跺湪鐢ㄦ埛杈撳叆涓嬩綔鍑哄搷搴斻備負浜嗗湪榪欑鎯呭喌涓嬶紝杞歡鐨勬暣浣撶粨鏋勭殑浼樺寲錛屽ぇ閲忎嬌鐢ㄧ粍浠舵妧鏈紝浣垮緱杞歡鎴愪負“鍙粍瑁?#8221; 鐨勭郴緇熴傝屾帴鍙?瀹炵幇鍒嗙鐨勭粨鏋勫艦寮忓緢濂藉湴瀹炵幇浜嗚繖涓洰鏍囥傚鎬佸湪姝や腑璧峰埌浜嗗叧閿х殑浣滅敤銆傚叾涓紝浠OP涓轟唬琛ㄧ殑“鍔ㄥ鎬?#8221;錛堜篃縐頒負 “subtyping澶氭?#8221;錛夛紝鏋勫緩璧峰湪榪愯鏃跺彲璋冩帶鐨勫彲緇勮緋葷粺銆侴P浣滀負“闈欏鎬?#8221;錛岃繍鐢ㄦ硾鍖栫殑綾誨瀷浣撶郴錛屽ぇ澶х畝鍖栬繖縐嶇郴緇熺殑鏋勫緩錛屾秷闄ら噸澶嶅姵鍔ㄣ傚彟澶栬繕鏈変竴縐嶉矞涓轟漢鐭ョ殑澶氭佸艦寮忥紝琚奀++ Template銆嬬殑浣滆匘avid Vandevoorde鍜孨icolai M. Josuttis縐頒負runtime unbound澶氭併傝屽師鏉ョ殑“鍔ㄥ鎬?#8221;錛屽嵆OOP澶氭侊紝琚粏鍖栦負runtime bound澶氭侊紱“闈欏鎬?#8221;錛屼篃灝辨槸妯℃澘錛屽垯琚О涓簊tatic unbound澶氭併?br>    涓嶈繃榪欑縐拌皳瀹規槗寮曡搗璇В錛屼富瑕佸氨鏄痷nbound榪欎釜璇嶄笂銆傚湪榪欓噷unbound鍜宐ound鏄寚鍦ㄧ紪鍐欎唬鐮佹椂錛屼竴涓猻ymbol鏄惁鍚屼竴涓叿浣撶殑綾誨瀷 bound銆備粠榪欑偣鏉ョ湅錛岀敱浜嶨P浠g爜鍦ㄧ紪鍐欎箣鏃訛紝闈㈠悜鐨勬槸娉涘瀷錛屼笉鏄叿浣撶殑綾誨瀷錛岄偅涔圙P鏄痷nbound鐨勩傚洜涓虹幇鏈夌殑GP鏄紪璇戞湡鐨勬妧鏈紝鎵浠ユ槸 static鐨勩侽OP鐨勫姩澶氭佸垯蹇呴』閽堝涓涓叿浣撶殑綾誨瀷緙栧啓浠g爜錛屾墍浠ユ槸bound鐨勩備絾鍥犱負鍔ㄥ鎬佸彲浠ュ湪榪愯鏃剁‘瀹氱湡姝g殑綾誨瀷錛屾墍浠ユ槸runtime 鐨勩傝嚦浜巖untime unbound錛屼互寰鍙嚭鐜板湪鍔ㄦ佽璦涓紝姣斿SmallTalk銆丳ython銆丷uby錛屼竴縐嶅艦璞″湴縐拌皳鏄?#8220;duck-typing”澶氭併傚叧浜庡鎬佺殑鏇村畬鏁寸殑鍒嗙被鍜屼粙緇嶅彲浠ョ湅榪欓噷銆?br>    閫氳繃鍔ㄦ佽璦鏈哄埗瀹炵幇鐨剅untime unbound錛屽瓨鍦ㄧ殑鎬ц兘鍜岀被鍨嬪畨鍏ㄩ棶棰樸備絾褰撴垜浠皢GP涓殑concept鎶鏈帹騫垮埌runtime鏃朵細鍙戠幇錛宺ungime unbound鍙互鎷ユ湁鍚孫OP鍔ㄥ鎬佺浉褰撶殑鏁堢巼鍜岀被鍨嬪畨鍏ㄦэ紝浣嗗嵈鍏鋒湁鏇村ぇ鐨勭伒媧繪у拰鏇翠赴瀵岀殑鐗規с傚叧浜庤繖鏂歸潰錛屾垜宸茬粡鍐欒繃涓綃?a >鏂囩珷 錛屽ぇ鑷存弿榪頒簡涓縐嶅疄鐜皉untime concept鐨勯斿緞錛堟湰鏂囩殑闄勫綍閲岋紝鎴戜篃緇欏嚭浜嗚繖縐峳untime concept瀹炵幇鐨勬敼榪涳級銆?

Runtime Concept

    Runtime concept鐨勫疄鐜板茍涓嶄細寰堝鏉傦紝鍩烘湰涓婂彲浠ユ部鐢∣OP涓殑“铏氳〃”鎶鏈紝騫朵笖鍙互鏇村姞綆鍗曘傜湡姝e鏉傜殑閮ㄥ垎鏄浣曞湪璇█灞傞潰琛ㄨ揪鍑鴻繖縐峳untime GP錛岃屼笉瀵瑰凡鏈夌殑static GP鍜屽叾浠栬璦鐗規ч犳垚騫叉壈銆傚湪榪欓噷錛屾垜棣栧厛寤虹珛涓涓熀鏈殑鏂規錛岀劧鍚庨氳繃涓浜涙渚嬪鍏惰繘琛屾楠岋紝鍦ㄥ彂鐜伴棶棰樺悗鍐嶅仛璋冩暣銆?br>    鑰冭檻鍒皉untime concept鏈韓涔熸槸concept錛岄偅涔堟部鐢╯tatic concept鐨勫畾涔夊艦寮忔槸涓嶄細鏈夐棶棰樼殑錛?br>      concept myconcept<T> {
          T& copy(T& lhs, T const& rhs);
          void T::fun();
          ...
      }
    鍏蜂綋鐨刢oncept瀹氫箟鍜屼嬌鐢ㄨ鍒欙紝鍙互鍙傝僀++0x鐨?a >concept鎻愭鎴?a >榪欑瘒鏂囩珷 錛屼互鍙?a >榪欑瘒鏂囩珷 銆?br>    鍙︿竴鏂歸潰錛屾垜浠彲浠ラ氳繃concept_map灝嗙鍚堜竴涓猚oncept鐨勭被鍨嬬粦瀹氬埌璇oncept涔嬩笂錛?br>      concept_map myconcept<MyType> {}
    鐩稿叧鍐呭涔熷彲鍙傝冧笂榪版枃浠躲?br>    鏈変簡concept涔嬪悗錛屾垜浠究鍙互鐢ㄥ畠浠害鏉熶竴涓ā鏉匡細
      template<myconcept T>void myfun(T const& val); //鍑芥暟妯℃澘
      template<myconcept T>class X  //綾繪ā鏉?br>      {
           ...
      };
    鍒版涓烘錛宺untime concept鍚宻tatic concept榪樻槸鍚屼竴涓簨鐗┿傚畠浠湡姝g殑鍒嗙鍦ㄤ簬浣跨敤銆傚浜巗tatic concept搴旂敤錛屾垜浠嬌鐢ㄤ竴涓叿浣撶殑綾誨瀷鍦ㄥ疄渚嬪寲錛堢壒鍖栵級涓涓ā鏉匡細
      X<MyType> x1;  //瀹炰緥鍖栦竴涓被妯℃澘
      MyType obj1;
      myfun(obj1);  //緙栬瘧鍣ㄦ帹瀵紀bj1瀵硅薄鐨勭被鍨嬪疄渚嬪寲鍑芥暟妯℃澘
      myfun<MyType>(obj1);  //鍑芥暟妯℃澘鐨勬樉寮忓疄渚嬪寲
    鐜板湪錛屾垜浠皢鍏佽涓縐嶉潪甯歌鐨勫仛娉曪紝浠ヤ嬌runtime concept鎴愪負鍙兘錛?strong>鍏佽浣跨敤concept瀹炰緥鍖栦竴涓ā鏉匡紝鎴栧畾涔変竴涓璞?/strong>銆?br>      X<myconcept> x2;
      myconcept* obj2=new myconcept<MyType>;
      myfun(obj2);  //姝ゅ錛岀紪璇戝櫒灝嗕細鐢熸垚runtime鐗堟湰鐨刴yfun
    榪欓噷鐨勫惈涔夐潪甯告槑紜細瀵逛簬x2錛屾帴鍙椾換浣曠鍚坢yconcept鐨勭被鍨嬬殑瀵硅薄銆俹bj2鏄竴涓?#8220;鍔ㄦ佸璞?/strong>”錛堣繖閲屽皢runtime concept寮曞叆鐨勯偅縐嶄笉鐭ラ亾鐪熷疄綾誨瀷錛屼絾絎﹀悎鏌愪釜concept鐨勫璞$О涓?#8220;鍔ㄦ佸璞?#8221;銆傝岀被鍨嬫槑紜凡鐭ョ殑瀵硅薄鎴愪負“闈欐佸璞?#8221;錛夛紝絎﹀悎myconcept瑕佹眰銆傝嚦浜庡疄闄呯殑綾誨瀷錛岄殢渚匡紝鍙絎﹀悎myconcept灝辮銆?br>    榪欑鎯呭艦闈炲父綾諱技浜庝紶緇熷姩澶氭佺殑interface銆備絾鏄紝瀹冧滑鏈夌潃鏍規湰鐨勫樊寮傘俰nterface鏄竴涓叿浣撶殑綾誨瀷錛屽茍涓旇姹傜被鍨嬮氳繃緇ф壙榪欑褰㈠紡瀹炵幇榪欎釜鎺ュ彛銆傝宑oncept鍒欎笉鏄竴縐嶇被鍨嬶紝鑰屾槸涓縐?#8220;娉涘瀷”鈥斺斿叿澶囨煇縐嶇壒寰佺殑綾誨瀷鐨勬娊璞★紙鎴栭泦鍚堬級錛屼笉闇瑕佸湪綾誨瀷鍒涘緩鏃剁珛鍒諱笌鎺ュ彛緇戝畾銆備笌 concept鐨勭粦瀹氾紙concept_map錛夊彲浠ュ彂鐢熷湪浠諱綍鏃跺欍備簬鏄紝runtime concept瀹為檯涓婃垚涓轟簡涓縐?strong>闈炰鏡鍏ョ殑鎺ュ彛銆傜浉姣攊nterface榪欑渚靛叆鍨嬬殑鎺ュ彛錛屾洿鍔犵伒媧諱究鎹楓?br>    閫氳繃榪欐牱涓縐嶅仛娉曪紝鎴戜滑渚垮彲浠ヨ幏寰椾竴縐嶈兘澶熷湪榪愯鏃跺伐浣滅殑GP緋葷粺銆?br>    鍦ㄦ鍩虹涓婏紝涓轟簡渚夸簬鍚庣畫妗堜緥灞曞紑錛岃繘涓姝ュ紩鍏ヤ竴浜涙湁鐢ㄧ殑鐗規э細
  1. 涓涓猚oncept鐨刟ssosiate type琚涓轟竴涓猚oncept銆備竴涓猚oncept鐨勬寚閽?寮曠敤錛?em>concept_id*/concept_id&錛屽惈涔夋槸鎸囧悜涓涓鍚?em>concept_id鐨勫姩鎬佸璞★紝鍏跺疄闄呯被鍨嬫湭鐭ワ級錛岄兘琚浣渃oncept銆備竴涓被妯℃澘鐢╟oncept瀹炰緥鍖栧悗錛岄昏緫涓婁篃鏄竴涓猚oncept銆?
  2. 鍔ㄦ佸璞$殑鍒涘緩銆傚鏋滈渶瑕佸湪鏍堜笂鍒涘緩鍔ㄦ佸璞★紝閭d箞鍙互浣跨敤璇硶錛?em>concept_id<type_id> obj_id; 榪欓噷concept_id鏄痗oncept鍚嶏紝type_id鏄叿浣撶殑綾誨瀷鍚嶏紝obj_id鏄璞″悕縐般傝繖鏍鳳紝渚垮湪鏍堜笂鍒涘緩浜嗕竴涓鍚?em>concept_id鐨勫姩鎬佸璞★紝鍏跺疄闄呯被鍨嬫槸type_id銆?br>濡傛灉闇瑕佸湪鍫嗕笂鍒涘緩鍔ㄦ佸璞★紝閭d箞鍙互鐢ㄨ娉曪細concept_id* obj_id=new concept_id<type_id>; 榪欏疄闄呬笂鍙互鐪嬩綔“concept鎸囬拡/寮曠敤”銆?
  3. concept鎺ㄥ錛堢紪璇戞湡錛夈傚浜庤〃杈懼紡concept_id obj_id=Exp錛屽叾涓?em>Exp鏄竴涓〃杈懼紡錛屽鏋滆〃杈懼紡Exp鐨勭被鍨嬫槸鍏蜂綋鐨勭被鍨嬶紝閭d箞obj_id浠h〃浜嗕竴涓潤鎬佸璞★紝鍏剁被鍨嬩負Exp鐨勭被鍨嬨傚鏋滆〃杈懼紡Exp鐨勭被鍨嬫槸concept錛岄偅涔?em>obj_id鏄竴涓姩鎬佸璞★紝鍏剁被鍨嬩負Exp鎵浠h〃鐨刢oncept銆?br>閭d箞濡備綍紜畾Exp鏄叿浣撶被鍨嬭繕鏄痗oncept錛熷彲浠ヤ嬌鐢ㄨ繖涔堜竴涓鍒欙細濡傛灉Exp涓秹鍙婄殑瀵硅薄錛屾瘮濡傚嚱鏁扮殑瀹炲弬銆佽〃杈懼紡鐨勬搷浣滄暟絳夌瓑錛屽彧瑕佹湁涓涓槸鍔ㄦ佸璞★紙綾誨瀷鏄痗oncept錛夛紝閭d箞Exp鐨勭被鍨嬪氨鏄痗oncept錛涘弽涔嬶紝濡傛灉鎵鏈夋秹鍙婄殑瀵硅薄閮芥槸闈欐佸璞★紙綾誨瀷涓哄叿浣撶殑綾誨瀷錛夛紝閭d箞Exp鐨勭被鍨嬩負鐩稿簲鐨勫叿浣撶被鍨嬨傚悓鏍風殑瑙勫垯閫傜敤浜巆oncept*鎴朿oncept&銆?
  4. concept杞崲銆傜被浼煎湪綾葷殑緇ф壙緇撴瀯涓婃墽琛岃漿鎹€俽efined concept鍙互闅愬紡鍦拌漿鎹㈡垚base concept錛屽弽榪囨潵蹇呴』鏄懼紡鍦拌繘琛岋紝騫朵笖閫氳繃concept_cast鎿嶄綔絎︽墽琛屻傚厔寮焎oncept涔嬮棿涔熷繀欏婚氳繃concept_cast杞崲銆?
  5. 鍩轟簬concept鐨勯噸杞斤紝涔熷彲浠ュ湪runtime鏃舵墽琛岋紝瀹炵幇娉涘寲鐨刣ynamic-dispatch鎿嶄綔銆?/li>

    涓嬮潰錛屽氨寮濮嬬涓涓渚嬨?

妗堜緥錛氬崌綰х殑鍧﹀厠

    鍋囪鎴戜滑鍋氫竴涓父鎴忥紝涓婚鏄紑鍧﹀厠鎵撲粭銆傛寜娓告垙鐨勬儻渚嬶紝娑堢伃鏁屼漢鍙互寰楀埌縐垎錛岀Н鍒嗗埌涓瀹氭暟閲忥紝渚垮彲浠ュ崌綰с備負浜嗙畝渚胯搗瑙侊紝鎴戜滑鍙冭檻瀵逛富鐐崌綰с傜涓綰х殑涓葷偖鏄?0mm鐨勶紱絎簩綰х殑涓葷偖鍗囩駭鍒?20mm銆備富鐐垎涓ょ錛屼竴縐嶅彧鑳藉彂灝勭┛鐢插脊錛屽彟涓縐嶅彧鑳藉彂灝勯珮鐖嗗脊銆傚洜姝わ紝鍧﹀厠涔熷垎涓轟袱縐嶏細鑳芥墦絀跨敳寮圭殑鍜岃兘鎵撻珮鐖嗗脊鐨勩?br>    涓轟簡浣夸唬鐮佸鏄撳紑鍙戝拰緇存姢錛屾垜浠冭檻閲囩敤妯″潡鍖栫殑鏂瑰紡錛氬紑鍙戜竴涓潶鍏嬬殑妗嗘灦錛岀劧鍚庨氳繃鏇存崲涓嶅悓鐨勪富鐐紝瀹炵幇涓嶅悓縐嶇被鐨勫潶鍏嬪拰鍗囩駭錛?br>      //涓浜涘熀鏈殑concept瀹氫箟
      //鐐脊澶碿oncept
      concept Warheads<typename T> {
          double explode(TargetType tt); //鐐脊鐖嗙偢錛岃繑鍥炴潃浼ょ巼銆備笉鍚屽脊澶達紝瀵逛笉鍚岀被鍨嬬洰鏍囨潃浼ょ巼涓嶄竴鏍楓?br>      }
      //鐐脊concept錛屾垜浠叧蹇冪殑褰撶劧鏄脊澶達紝鎵浠ョ敤Warheads瀹氫箟涓涓猘ssociate type
      concept Rounds<typename T> {
          Warheads WH;
          ...
      }
      //涓葷偖concept
      concept Cannons<typename T> {
          Rounds R;
          void T::load(R& r); //瑁呭~鐐脊錛宭oad涔嬪悗鐐脊浼氬瓨鏀懼湪鐐啗閲岋紝涓嶈兘鍐峫oad錛岄櫎闈炴妸鐐脊鎵撳嚭鍘?br>          R::WH T::fire();   //寮鐐紝榪斿洖寮瑰ご銆傚彂灝勫悗鐐啗鍙樼┖錛屽彲浠ュ啀load
      }
      //綾誨瀷鍜屾ā鏉垮畾涔?br>      //鍧﹀厠綾繪ā鏉?br>      template<Cannons C>
      class Tank
      {
          ...
      public:
          void load(typenam C::R& r) {
              m_cannon.load(r);
          }
          typename C::R::WH fire() {
              return m_cannon.fire();
          }
      private:
          C m_cannon;
      };
      //涓葷偖綾繪ā鏉?br>      template<Rounds Rd>
      class Cannon
      {
      public:
          typedef Rd R;
          void load(R& r) {...}
          typename R::WH fire() {...}
      }
      template<Rounds Rd> concept_map Cannons<Cannon<Rd>>{}
      //鐐脊綾繪ā鏉?br>      template<Warheads W>
      class Round
      {
      public:
          typedef W WH;
          static const int caliber=W::caliber;
          W shoot() {...}
          ...
      };
      template<Warhead W> concept_map<Round<W>>{}
      //寮瑰ご綾繪ā鏉匡紝閫氳繃traits鎶婂悇綾誨脊澶寸殑涓嶅悓琛屼負寮瑰ご鐨勪唬鐮佹鏋跺垎紱伙紝浣跨被鍨?#8220;鍙粍瑁?#8221;
      concept WH_Traits<T> {
          return T::exploed(int, TargetType, double, Material);
      }
      template<WH_Traits wht, int c>
      class Warhead
      {
      public:
          const static int caliber=c;
          double explode(TargetType tt) {
              return wht::exploed(c, tt, ...);
          }
          ...
      };
      template<WH_Traits WHT, int c> concept_map<Warhead<WHT, c>>{}
      //寮瑰ごtraits
      struct KE_WHTraits
      {
          static double exploed(int caliber, TargetType tt, double weight, Material m) {...}
      };
      concept_map<KE_WHTraits>{}
      struct HE_WHTraits
      {
          static double exploed(int caliber, TargetType tt, double weight, Material m) {...}
      };
      concept_map<HE_WHTraits>{}
      //瀹氫箟鍚勭被寮瑰ご
      typedef Warhead<KE_WHTraits, 90> WH_KE_90;
      typedef Warhead<KE_WHTraits, 120> WH_KE_120;
      typedef Warhead<HE_WHTraits, 90> WH_HE_90;
      typedef Warhead<HE_WHTraits, 120> WH_HE_120;
      //瀹氫箟鍚勭被鐐脊
      typedef Round<WH_KE_90> Round_KE_90;
      typedef Round<WH_KE_120> Round_KE_120;
      typedef Round<WH_HE_90> Round_HE_90;
      typedef Round<WH_HE_120> Round_HE_120;
      //瀹氫箟鍚勭被涓葷偖
      typedef Cannon<Round_KE_90> Cannon_KE_90;
      typedef Cannon<Round_KE_120> Cannon_KE_120;
      typedef Cannon<Round_HE_90> Cannon_HE_90;
      typedef Cannon<Round_HE_120> Cannon_HE_120;
      //瀹氫箟鍚勭被鍧﹀厠
      typedef Tank<Cannon_KE_90> Tank_KE_90;
      typedef Tank<Cannon_KE_120> Tank_KE_120;
      typedef Tank<Cannon_HE_90> Tank_HE_90;
      typedef Tank<Cannon_HE_120> Tank_HE_120;
    浜庢槸錛屽綋鎴戜滑寮濮嬫父鎴忔椂錛屽氨鍙互鎸夌収鐜╁鐨勭駭鍒垱寤哄潶鍏嬪璞★紝騫朵笖灝勫嚮錛?br>      //絎竴綰х帺瀹訛紝椹鵑┒鍙戝皠90mm楂樼垎鐐脊鐨勫潶鍏?br>      Tank_HE_90 myTank;
      Round_HE_90 r1;
      myTank.load(r1);
      myTank.fire();
      //絎簩綰х帺瀹訛紝椹鵑┒鍙戝皠120mm絀跨敳寮圭殑鍧﹀厠
      Tank_KE_120 yourTank;
      Round_KE_120 r2;
      yourTank.load(r2);
      yourTank.fire();
      //濡傛灉榪欐牱錛屽嵄闄╋紝鐐脊涓嶅尮閰嶏紝灝忓績鐐歌啗
      myTank.load(r2); //error
    鍒扮洰鍓嶄負姝紝榪欎簺浠g爜浠呬粎灞曠ず浜嗛潤鎬佺殑GP銆俢oncept鍦ㄨ繖閲屼篃鍙槸璧峰埌浜嗙被鍨嬪弬鏁扮害鏉熺殑浣滅敤銆備絾鏄紝鍦ㄨ繖浜涗唬鐮佷腑錛屾垜浠彲浠ユ槑鏄懼湴鐪嬪埌錛屽湪榪愮敤GP 鐨勫弬鏁板寲綾誨瀷鐗規т箣鍚庯紝鍙互寰堝鏄撳湴榪涜緇勪歡鍖栥傚浜庝竴緇勫叿澶囩被浼艱涓哄拰緇撴瀯鐗瑰緛鐨勭被鍨嬶紝鎴戜滑鍙互閫氳繃妯℃澘鐨勭被鍨嬪弬鏁幫紝灝嗗樊寮傞儴鍒嗘娊鍙栧嚭鏉ワ紝鐙珛鎴愭墍璋撶殑 “traits”鎴栬?#8220;policy”銆傚茍涓旈氳繃traits鎴杙olicy鐨勭粍鍚堟瀯鎴愪笉鍚岀殑浜у搧銆傚湪鏌愪簺澶嶆潅鐨勬儏鍐典笅錛宼raits鍜宲olicy榪樺彲浠ヨ繘涓姝ラ氳繃traits鎴杙olicy瀹炵幇緇勪歡鍖栥?br>    鎺ヤ笅鏉ワ紝寰堣嚜鐒跺湴搴斿綋灞曞紑runtime GP鐨勮繍鐢ㄤ簡銆?br>    涓涓父鎴忚呮槸鍙互鍗囩駭鐨勶紝涓轟簡浣垮緱榪欑鍗囩駭鍙樺緱鏇村姞鐏墊椿錛屾垜浠細寰堣嚜鐒跺湴浣跨敤Composite妯″紡銆傜幇鍦紝鎴戜滑鍙互鍦≧untime concept鐨勬敮鎻翠笅瀹炵幇GP鐗堢殑Composite妯″紡錛?br>      //鍧﹀厠鐨刢oncept
      concept tanks<T> {
          typename Round;
          void T::load(Round&);
          Round::WH T::fire();
      }
      concept_map tanks<Tank_KE_90>{}
      concept_map tanks<Tank_HE_90>{}
      concept_map tanks<Tank_KE_120>{}
      concept_map tanks<Tank_HE_120>{}
      //鍧﹀厠鏋勯犲嚱鏁版ā鏉?br>      template<tanks T>
      T* CreateTank(WHType type, int level) { //WHType鏄竴涓灇涓捐〃鏄庣偖寮圭綾?br>          switch(level)
          {
          case 1:
              if(type==wht_KE)
                  return new tanks<Tank_KE_90>;
              else
                  return new tanks<Tank_HE_90>;
          case 2:
              if(type==wht_KE)
                  return new tanks<Tank_KE_120>;
              else
                  return new tanks<Tank_HE_120>;
          default:
              throw error("no such tank.");
          }
      }
      //鐜╁綾?br>      class player
      {
      public:
          void update() {
m_pTank=CreateTank(m_tankType, ++m_level);
          }
          ...
      private:
          int m_level;
          WHType m_tankType;
tanks* m_pTank;
      };
    鍦ㄧ被player涓紝浣跨敤浜嗕竴涓猚oncept錛岃屼笉鏄竴涓被鍨嬶紝鏉ュ畾涔変竴涓璞°傛牴鎹墠闈㈡彁鍒扮殑concept鎺ㄥ瑙勫垯錛宮_pTank鎸囧悜涓涓姩鎬佸璞★紝榪樻槸闈欐佸璞★紝鍙栧喅浜庝負瀹冭祴鍊肩殑琛ㄨ揪寮忕被鍨嬫槸concept榪樻槸鍏蜂綋綾誨瀷銆傚湪update()鍑芥暟涓紝鍙互鐪嬪埌錛宮_pTank閫氳繃琛ㄨ揪寮?strong>CreateTank(m_tankType, ++m_level)
璧嬪箋傞偅涔堣繖涓嚱鏁扮殑榪斿洖綾誨瀷錛屽皢鍐沖畾m_pTank鐨勭被鍨嬨侰reateTank()鏄竴涓ā鏉匡紝榪斿洖綾誨瀷鏄ā鏉垮弬鏁幫紝騫朵笖鏄鍚坈oncept tanks鐨勭被鍨嬨傚叧閿湪浜庝唬鐮佷腑鐨?strong>return new tanks<...>璇彞銆傚墠鏂囧凡緇忚榪囷紝榪欑褰㈠紡鏄嬌鐢?lt;...>涓殑綾誨瀷鍒涘緩涓涓鍚坱anks鐨勫姩鎬佸璞°傛墍浠ワ紝CreateTank()榪斿洖鐨勬槸鍔ㄦ佸璞°傞偅涔堬紝m_pTank涔熷皢鎸囧悜涓涓姩鎬佸璞°傚湪榪愯鏃訛紝褰撶帺瀹惰揪鍒頒竴瀹氭潯浠訛紝渚垮彲浠ュ崌綰с倁pdate()鎴愬憳鍑芥暟灝嗘牴鎹帺瀹剁殑綰у埆閲嶆柊鍒涘緩鐩稿簲鐨勫潶鍏嬪璞★紝璧嬪煎埌m_pTank涓?br>    榪欓噷錛屽疄闄呬笂鏄埄鐢╰anks榪欎釜concept鎻忚堪錛屽厖褰撶被鍨嬬殑鍏湁鎺ュ彛銆傚畠鎵鍏鋒湁鐨勭壒鎬у悓鍔ㄥ鎬佺殑鎶借薄鍩虹被鏄潪甯哥浉浼肩殑銆備絾鏄墍涓嶅悓鐨勬槸錛屽鍚屾垜鍦ㄤ唬鐮佷腑灞曠幇鐨勯偅鏍鳳紝concept浣滀負鎺ュ彛錛屽彲浠ュ湪浠諱綍鏃跺欏畾涔夛紝鍚岀被鍨嬬粦瀹氥傝屾棤闇璞℃娊璞″熀綾婚偅鏍鳳紝蹇呴』鍦ㄧ被鍨嬪畾涔変箣鍓嶅畾涔夈備簬鏄紝榪欑闈炰鏡鍏ュ紡鐨勬帴鍙g浉姣旀娊璞″熀綾繪嫢鏈夋洿鍔犵伒媧昏嚜鐢辯殑鐗規с?br>    鐒惰岋紝浜嬫儏榪樻病鏈夊畬銆傚湪榪涗竴姝ユ繁鍖栧潶鍏嬫渚嬪悗錛屾垜浠繕灝嗗彂鐜皉untime GP鎷ユ湁鏇村姞鏈夎叮鍜岄噸瑕佺殑鐗規с?br>    鍧﹀厠寮鐐負鐨勬槸鏀誨嚮鐩爣銆傚鐩爣鐨勬瘉浼ゆ儏鍐電洿鎺ュ叧緋誨埌鐜╁鐨勭敓瀛樺拰寰楀垎銆傛墍浠ワ紝鎴戜滑蹇呴』瀵瑰皠鍑誨悗錛岀洰鏍囩殑鎹熸瘉鎯呭喌榪涜璁$畻銆備簬鏄紪鍐欎簡榪欐牱涓緇勫嚱鏁幫細
      double LethalityEvaluate(Target& t, double hitRate, WH_KE_90& wh) {...}
      double LethalityEvaluate(Target& t, double hitRate, WH_HE_90& wh) {...}
      double LethalityEvaluate(Target& t, double hitRate, WH_KE_120& wh) {...}
      double LethalityEvaluate(Target& t, double hitRate, WH_HE_120& wh) {...}
    Target鏄洰鏍囷紱hitRate鏄懡涓巼錛屾牴鎹潶鍏嬪拰鐩爣鐨勪綅緗佸皠鍑誨弬鏁扮患鍚堣綆楄幏寰楋紙濡傛灉鎯寵鏇寸湡瀹烇紝鍙互鍔犱笂椋庡悜銆侀鍔涖佹皵娓┿佹箍搴︺佹搗鎷旂瓑絳夊洜绱狅級錛泈h灝辨槸鍙戝皠鍑烘潵鐨勭偖寮逛簡銆傚嚱鏁拌繑鍥炴潃浼ょ巼銆傚姝わ紝鎴戜滑渚垮彲浠ュ湪灝勫嚮涔嬪悗榪涜璇勪及浜嗭細
      double l=LethalityEvaluate(house, hr, myTank.fire());
     鐜板湪錛屾父鎴忛渶瑕佽繘琛屼竴浜涙墿灞曪紝澧炲姞涓涓崌綰э紝鍏佽鍧﹀厠鍗囩駭鍒扮涓夌駭銆傚埌浜嗙涓夋瀬錛屼富鐐殑鍙e緞灝卞崌鍒板ご浜嗭紝浣嗗彲浠ュ崌綰у姛鑳斤紝鍙互鍙戝皠絀跨敳寮瑰拰楂樼垎寮廣傝繖鏍鳳紝鎴戜滑灝遍渶瑕佷竴涓?#8220;涓ょ敤”鐨勪富鐐被銆備絾鏄紝瀹為檯涓婂茍涓嶉渶瑕佺洿鎺ュ仛榪欎箞涓涓被錛屽彧闇瑕佺敤“涓ょ敤”鐨勫脊鑽潵瀹炰緥鍖朇annon妯℃澘錛?br>      concept Warheads120<T> : Warheads<T> { //120mm鐐脊澶碿oncept
          double LethalityEvaluate(Target& t, double hitRate, T& wh);
      }
      concept Rounds120<T> : Rounds<T> {}
      concept_map Warheads120<WH_KE_120> {}  //120mm鐨勭┛鐢插脊灞炰簬Warheads120
      concept_map Warheads120<WH_HE_120> {}  //120mm鐨勯珮鐖嗗脊灞炰簬Warheads120
      template<WH120 WH> concept_map Rounds120<Round<WH>> {} //鎵鏈夊脊澶存槸Warheads120鐨勭偖寮歸兘鏄睘浜嶳ounds120
      typedef Canon<Rounds120> Cannon120; //鐢≧ounds120瀹炰緥鍖朇annon妯℃澘錛屽緱鍒?#8220;涓ょ敤”涓葷偖
    涓鍫嗙偒鐩殑concept鍜宑oncept_map涔嬪悗錛屽緱鍒癛ounds120錛屽氨鏄墍璋撶殑“涓ょ敤”寮硅嵂銆備綔涓轟竴涓猚oncept錛屽畠鍚屼袱縐嶇被鍨媘ap 鍦ㄤ竴璧鳳紝瀹為檯涓婂氨鎴愪簡榪欎袱涓被鍨嬬殑鎺ュ彛銆傚綋鎴戜滑浣跨敤Rounds120瀹炰緥鍖朇annon<>妯℃澘鏃訛紝涔熷氨鍒涘緩浜嗕竴涓?#8220;涓ょ敤鐨勪富鐐?#8221;錛堜嬌鐢?Rounds120寮硅嵂鐨勪富鐐級銆傚鏋滅敤榪欎釜Cannon120瀹炰緥鍖朤ank妯℃澘錛岄偅涔堝氨鍙互寰楀埌絎笁綰у潶鍏嬶紙瑁呬笂Cannon120涓葷偖鐨勫潶鍏嬪氨鏄涓夌駭錛夛細
      typedef Tank<Cannon120> TankL3;
    浜庢槸錛屾垜浠彲浠ヤ嬌鐢ㄤ笉鍚岀殑120mm寮硅嵂瑁呭~涓葷偖錛屽茍涓斿彂灝勭浉搴旂殑鐐脊錛?br>      TankL3 tank_l3;
      Round_KE_120 ke_round;  //鍒涘緩涓鏋氱┛鐢插脊
      Round_HE_120 he_round;  //鍒涘緩涓鏋氶珮鐖嗗脊
      tank_l3.load(ke_round);  //瑁呭~絀跨敳寮?br>      tank_l3.fire();               //鍙戝皠絀跨敳寮?br>      tank_l3.load(he_round);  //瑁呭~楂樼垎寮?br>      tank_l3.fire();               //鍙戝皠楂樼垎寮?br>    鐜板湪錛屾垜浠妸娉ㄦ剰鍔涗粠娑堢伃鏁屼漢錛岃漿縐誨埌TankL3::load()鐨勫弬鏁扮被鍨嬪拰TankL3::fire()鐨勮繑鍥炵被鍨嬩笂銆傚湪涓綰у拰浜岀駭鍧﹀厠錛堢被鍨?Tank_KE_90絳夛級涓婏紝load()鎴愬憳鐨勫弬鏁扮被鍨嬫槸Round_KE_90絳夊叿浣撶殑綾誨瀷錛涜宖ire()鐨勮繑鍥炵被鍨嬩害鏄姝ゃ備絾TankL3鏄敤 Cannon120瀹炰緥鍖栫殑錛岃孋annon120鏄敤Rounds120榪欎釜concept瀹炰緥鍖栫殑銆傛牴鎹甌ank<>妯℃澘鐨勫畾涔夛紝 load()鎴愬憳鐨勫弬鏁扮被鍨嬪疄闄呬笂鏄ā鏉垮弬鏁頒笂鐨勪竴涓猘ssociate type銆傝岃繖涓猘ssociate type瀹為檯涓婂氨鏄疪ounds120銆傝繖鎰忓懗鐫load()瀹炰緥鍖栧悗鐨勭鍚嶆槸錛歷oid load(Rounds120& r)錛堣繖閲屾殏涓斿厑璁竎oncept浣滀負綾誨瀷鍙傛暟浣跨敤錛夈傚彧瑕佺鍚圧ounds120鐨勭被鍨嬮兘鍙互浣滀負瀹炲弬浼犻掔粰load()鎴愬憳銆傚悓鏍鳳紝fire()鎴愬憳鐨勮繑鍥炵被鍨嬫潵鑷簬Round120涓婄殑associate type錛屼篃鏄釜concept銆傚洜姝わ紝fire()瀹炰緥鍖栧悗鐨勭鍚嶆槸錛歐arheads120 fire()銆?br>    鎺ヤ笅鏉ュ煎緱娉ㄦ剰鐨勬槸fire()鎴愬憳銆傚畠榪斿洖綾誨瀷鏄竴涓猚oncept錛岄偅涔堣繑鍥炵殑灝嗘槸涓涓姩鎬佸璞°傚湪榪愯鏃訛紝瀹冨彲鑳借繑鍥濿H_KE_120鐨勫疄渚嬶紝涔熷彲鑳借繑鍥濿H_HE_120鐨勫疄渚嬶紝鍙栧喅浜庤繍琛屾椂load()鍑芥暟鎵瑁呭~鐨勭偖寮圭被鍨嬨傚綋鎴戜滑閲囩敤LethalityEvaluate()鍑芥暟瀵硅鐐脊鐨勬潃浼ゆ儏鍐佃繘琛岃瘎浼板皢浼氬嚭鐜版瘮杈冨井濡欑殑鎯呭喌錛?br>      double x=LethalityEvaluate(hisTank, hr, tank_l3.fire());
    榪欐椂鍊欙紝緙栬瘧鍣ㄥ簲褰撻夋嫨鍝釜LethalityEvaluate()錛熺敱浜巘ank_l3.fire()榪斿洖鐨勬槸涓涓姩鎬佸璞★紝鍏蜂綋鐨勭被鍨嬬紪璇戞椂涓嶇煡閬撱傚疄闄呬笂錛屽湪姝e畻鐨勯潤鎬佽璦涓紝榪欐牱鐨勮皟鐢ㄦ牴鏈棤娉曢氳繃緙栬瘧銆傚綋鐒訛紝緙栬瘧鍣ㄥ彲浠ラ氳繃runtime reflect鑾峰緱綾誨瀷淇℃伅錛岀劧鍚庡湪LethalityEvaluate()鐨勯噸杞戒腑鍖歸厤姝g‘鐨勫嚱鏁般傜劧鑰岋紝榪欑鍔ㄦ佽璦鍋氭硶浼氶犳垚鎬ц兘涓婄殑闂錛屼負闈欐佽璦鎵涓嶅睉銆?br>    浣嗘槸錛屽湪榪欓噷錛屽湪runtime concept鐨勪綔鐢ㄤ笅錛屾垜浠彲浠ヤ嬌榪欑璋冪敤鎴愪負闈欐佺殑銆佸悎娉曠殑錛屽茍涓旀槸楂樻晥鐨勩傝娉ㄦ剰鎴戝湪concept Warhead120鐨勫畾涔変腑鍔犲叆浜嗕竴涓猘ssociate function錛歞ouble LethalityEvaluate(Target& t, double hitRate, T& wh);銆俽untime concept浼氬緢蹇犲疄鍦板皢concept瀹氫箟涓殑associate function鏋勯犲埌涓涓嚱鏁版寚閽堣〃錛堟垜縐頒箣涓篶table錛変腑銆傦紙璇︾粏鎯呭喌璇風湅鏈枃闄勫綍鍜?a >榪欑瘒鏂囩珷鐨勯檮褰曪級銆傚洜姝わ紝涓巘ank_l3.fire()榪斿洖鐨勫姩鎬佸璞″疄闄呯被鍨嬪搴旂殑LethalityEvaluate()鍑芥暟鐗堟湰鐨勬寚閽堟鑰佽佸疄瀹炲湴韜哄湪鐩稿簲鐨刢table閲屻傛墍浠ワ紝鎴戜滑鍙互鐩存帴浠庡姩鎬佸璞′笂鑾峰緱鎸囧悜ctable鐨勬寚閽堬紝騫朵笖鎵懼嚭鐩稿簲鐨凩ethalityEvaluate()鍑芥暟鎸囬拡錛岀劧鍚庣洿鎺ヨ皟鐢ㄥ嵆鍙傛瘮濡傦細
      tank_l3.load(ke_round);
      double x=LethalityEvaluate(hisTank, hr, tank_l3.fire());
    鍦ㄨ繖浜涗唬鐮佺殑鑳屽悗錛宬e_round閫氳繃load()瑁呭~鍏ヤ富鐐悗錛屼究鎽囪韓鍙樻垚浜嗕竴涓姩鎬佸璞°傜紪璇戝櫒浼氫負瀹冮檮鍔犱笂鎸囧悜ctable鐨勬寚閽堬紝鐒跺悗鍦ㄨ皟鐢?fire()鐨勬椂鍊欒繑鍥炴寚鍚戣繖涓姩鎬佸璞$殑寮曠敤銆傛鏃訛紝緙栬瘧鍣ㄥ彂鐜拌繖涓姩鎬佸璞℃墍瀵瑰簲鐨刉arhead120 concept涓婂凡緇忓畾涔変簡涓涓悕涓篖ethalityEvaluate()鐨刟ssociate function錛屽茍涓旂鍚嶄笌褰撳墠璋冪敤鐩哥銆備簬鏄紝渚垮彲浠ョ洿鎺ユ壘鍒癱table涓璍ethalityEvaluate()瀵瑰簲鐨勯偅涓嚱鏁版寚閽堬紝鏃犳墍欏懼繉鐨勮皟鐢ㄣ傜敱浜庝竴涓猚oncept鐨刟ssociate function鑲畾鏄悓瀹為檯綾誨瀷鍖歸厤鐨勫嚱鏁扮増鏈傛瘮濡傦紝瀵逛簬WH_HE_120鑰岃█錛屽畠鐨刟ssociate function LethalityEvaluate()鏄増鏈細double LethalityEvaluate(Target& t, double hitRate, WH_HE_120& wh) {...}銆傚叾浠栫増鏈殑LethalityEvaluate()閮芥棤娉曟弧瓚砪oncept Warhead120鏂藉姞鍦ㄧ被鍨媁H_HE_120涓婄殑綰︽潫銆?br>    榪欎釜鐗規у氨浣垮緱runtime concept浣滀負鎺ュ彛錛岀浉姣斿姩澶氭佺殑鎶借薄鎺ュ彛錛屽叿鏈夋洿澶х殑鐏墊椿鎬с傛娊璞℃帴鍙e彧琛ㄨ揪浜嗙被鐨勬垚鍛橈紝浠ュ強綾繪湰韜殑琛屼負錛屾棤娉曡〃杈劇被鍨嬪悓鍏朵粬綾誨瀷鐨勪簰鍔ㄥ叧緋伙紝鎴栬呰綾誨瀷闂寸殑浜や簰銆傝宑oncept鍚屾椂鎻忚堪浜嗘垚鍛樺嚱鏁板拰鐩稿叧鐨勮嚜鐢卞嚱鏁幫紙鍖呮嫭鎿嶄綔絎︼級錛屼嬌寰楃被鍨嬮棿鐨勫叧緋諱篃鍙互閫氳繃鎺ュ彛鐩存帴鑾峰緱錛屾棤闇鍐嶉氳繃 reflect絳夐棿鎺ョ殑鍔ㄦ佹墜孌點?br>    榪欎竴鐐瑰湪澶勭悊鍐呯疆綾誨瀷錛堝int銆乫loat錛夈侀緗被鍨嬶紙鏌愪簺搴撲腑鐨勭被鍨嬶級銆佺涓夋柟綾誨瀷絳変笉鏄撴垨鏃犳硶淇敼鐨勭被鍨嬫湁鑷沖叧閲嶈鐨勪綔鐢ㄣ傚湪OOP涓嬶紝鎴戜滑鏃犳硶杈撳嚭涓涓?#8220;鏁存暟”錛屾垨璁告槸short銆佹垨璁告槸long錛岀敋鑷蟲槸unsinged longlong銆備負姝わ紝鎴戜滑瑕佷箞鎶婂畠浠漿鎹㈡垚涓涓?#8220;鏈鍩虹綾誨瀷”錛圕/C++鐨剉oid*錛屾垨C#鐨凮bject*錛夛紝鐒跺悗榪愮敤rtti淇℃伅榪涜綾誨瀷杞崲錛屽啀鍋氬鐞嗭紱瑕佷箞浣跨敤variant榪欑綾誨瀷鍖呰錛堝氨鍍廋OM涓殑閭f牱錛夛紝鐒跺悗涓轟粬浠叏闈㈠畾涔変竴濂楄綆楀簱銆備絾runtime concept涓嶄粎浠呭厑璁歌緭鍑?#8220;鏁存暟”榪欐牱涓涓姩鎬佸璞★紝鑰屼笖榪樺皢鐩稿叧鐨勫悇縐嶆搷浣滈檮鍦ㄥ姩鎬佸璞′箣涓婏紝浣夸箣鏃犻渶鍊熷姪rtti鎴栬呰緟鍔╃被鍨嬩篃鍙繘琛屽悇綾誨鐞嗭紝灝卞鍚屽鐞嗗叿浣撶被鍨嬬殑瀵硅薄閭f牱銆?br>    浣嗘槸錛屽湪榪欓噷鎴戜粎浠呰冨療浜嗛拡瀵逛竴涓被鍨嬬殑concept錛堟殏涓旂О涔嬩負涓鍏僣oncept錛夛紝榪樻湭娑夊強涓や釜鍜屼袱涓互涓婄被鍨嬬殑concept錛堟殏涓旂О涓哄鍏?concept錛屾垨n-鍏僣oncept錛夈傚湪瀹為檯寮鍙戜腑錛屽鏁版搷浣滈兘浼氭秹鍙婂涓璞★紝姣斿涓や釜鏁扮浉鍔犮佷竴縐嶇被鍨嬭漿鎹㈡垚鍙︿竴縐嶃傛鏃訛紝鎴戜滑灝嗕細闈㈠澶氬厓鐨?concept銆備絾鏄鍏冪殑runtime concept鐨勭壒鎬ц繕涓嶆竻妤氾紝榪橀渶瑕佽繘涓姝ョ爺絀跺垎鏋愩?

鎬葷粨

    鏈枃鍒濇灞曠ず浜嗗湪寮曞叆runtime concept涔嬪悗錛孏P鐨勫姩鎬佸寲鐗規с傚綊綰寵搗鏉ユ湁浠ヤ笅鍑犵偣錛?
  1. static GP鍜宺untime GP涔嬮棿鍦ㄥ艦寮忎笂瀹屽叏緇熶竴錛屼袱鑰呭彲浠ョ湅浣滃悓涓縐嶆娊璞℃満鍒剁殑涓嶅悓琛ㄧ幇銆傚洜姝わ紝鎴戜滑鍦ㄦ瀯閫犵被鍨嬨佸嚱鏁扮瓑浠g爜瀹炰綋鐨勬椂鍊欙紝騫朵笉闇瑕佽冭檻瀹冧滑灝嗘潵闇瑕佷綔涓簊tatic浣跨敤錛岃繕鏄痳untime浣跨敤銆俿tatic鍜宺untime鐨勬帶鍒跺畬鍏ㄥ彇鍐充簬榪欎簺浠g爜瀹炰綋鐨勪嬌鐢ㄦ柟寮忋傝繖灝卞緢濂藉湴鍑忓皯浜嗚蔣浠墮」鐩棭鏈熻璁★紝浠ュ強搴撹璁$殑鍓嶇灮鎬ф柟闈㈠帇鍔涖?
  2. runtime concept浣滀負闈炰鏡鍏ュ紡鐨勬帴鍙o紝鍙互闈炲父鐏墊椿鍦頒嬌鐢ㄣ傛垜浠棤闇鍦ㄤ唬鐮佺紪鍐欑殑涓寮濮嬪氨綺劇‘鍦板畾涔夊ソ鎺ュ彛錛屽彲浠ュ厛鐩存帴緙栧啓鍔熻兘綾誨瀷錛岄愭鏋勫緩杞歡緇撴瀯銆傞渶瑕佹椂鍐嶅畾涔夋帴鍙o紙concept錛夛紝騫跺彲浠ュ湪浠諱綍鏃跺欎笌綾誨瀷緇戝畾銆傛帴鍙g殑瀹氬埗鍙互鎴愪負涓涓愭鎺ㄨ繘鐨勮繃紼嬶紝鏃╂湡鐨勬帴鍙h璁′笉瓚充駭鐢熺殑涓嶈壇褰卞搷鐩稿簲鍦板急鍖栦簡銆?
  3. runtime concept鐩告瘮鍔ㄥ鎬佺殑鎶借薄鎺ュ彛鏇村姞鑷敱銆俢oncept鍙互瀵圭被鍨嬬殑鎴愬憳鍑芥暟銆佽嚜鐢卞嚱鏁般佺被鍨嬬壒寰佺瓑絳夋柟闈㈢殑鐗規т綔鍑烘弿榪般傚湪runtime鍖栦箣鍚庯紝鐩稿叧鑷敱鍑芥暟鎴愪負浜嗘帴鍙g殑涓閮ㄥ垎銆傛洿榪涗竴姝ヨ綰︿簡綾誨瀷鍦ㄦ暣浣撹蔣浠剁殑浠g爜鐜涓殑琛屼負鐗瑰緛銆傚悓鏃訛紝涔熶負鍔ㄦ佸璞$殑璁塊棶鎻愪緵鏇村鐨勪俊鎭拰鎵嬫銆?
  4. concept涓嶄粎瀹炵幇綾誨瀷鎻忚堪錛岃繕鍙互榪涗竴姝ユ弿榪扮被鍨嬩箣闂寸殑鍏崇郴銆傝繖澶уぇ瀹屽杽浜嗘娊璞′綋緋匯傜壒鍒湪runtime鎯呭喌涓嬶紝榪欑鏇村娉涚殑綾誨瀷鎻忚堪鑳藉姏鍙互璧峰埌涓や釜浣滅敤錛氬叾涓錛岃繘涓姝ョ害鏉熶簡鍔ㄦ佸璞$殑琛屼負錛涘叾浜岋紝涓哄鐣屾搷浣滃拰浣跨敤綾誨瀷鎻愪緵鏇村鐨勪俊鎭紝娑堥櫎鎴栧噺灝戜簡綾誨瀷鍖歸厤鏂歸潰鐨勬娊璞℃儵緗氥傝繖涓柟闈㈢殑鏇村鐗規у皻涓嶆竻妤氾紝榪橀渶瑕佹洿榪涗竴姝ュ湴娣卞叆鐮旂┒銆?
    緇間笂鎵榪幫紝鎴戜滑鍙互鐪嬪埌runtime GP鍦ㄤ笉鎹熷け鎬ц兘鐨勬儏鍐典笅錛屽叿澶囩浉姣斿姩澶氭佹洿鐏墊椿銆佹洿涓板瘜鐨勬墜孌點備粠鏍規湰涓婅岃█錛屼互concept涓烘牳蹇冪殑GP鎻愪緵浜嗘洿鍩虹鐨勬娊璞′綋緋伙紙鍏充簬榪欐柟闈㈡帰璁紝璇風湅鎴戠殑榪欑瘒鏂囩珷涓叧浜巆oncept瀵圭被鍨嬪垝鍒嗙殑浣滅敤閮ㄥ垎錛夈傛垨鑰呰錛宑oncept鐨勭被鍨嬫弿榪板拰綰︽潫浣滅敤浣撶幇浜嗙被鍨嬫娊璞$殑鏈川錛岃屽湪姝ゅ熀紜涓婅繘涓姝ヨ鐢熷嚭static鍜宺untime涓ょ鍏蜂綋鐨勪嬌鐢ㄦ柟寮忋傝繖涔熷氨鏄墍璋擄細閬撶敓涓錛屼竴鐢熶簩銆?)

闄勫綍

Runtime Concept瀹炵幇鏂規浜?/h4>     鎴戝湪榪欑瘒鏂囩珷闄勫綍閲岋紝緇欏嚭浜嗕竴縐嶅疄鐜皉untime concept鐨勫彲鑳芥柟妗堛傝繖閲岋紝鎴戣繘涓姝ュ榪欎釜鏂規鍋氫簡涓浜涙敼榪涳紝浣垮叾鏇村姞綺劇畝銆侀珮鏁堛?br>    鍋囪鎴戜滑鏈変竴涓猚oncept錛?br>    concept Shape<T>
    {
        void T::load(xml);
        void T::draw(device);
        void move(T&);
    }
    鍙﹀錛岃繕鏈変竴涓唬琛ㄥ渾鐨刢oncept錛?br>    concept Cycles<T> :
        CopyConstructable<T>,
        Assignable<T>,
        Swappable<T>,
        Shape<T>
    {
        T::T(double, double, double);
        double T::getX();
        double T::getY();
        double T::getR();
        void T::setX(double);
        void T::setY(double);
        void T::setR(double);
    }
    鐜板湪鏈夌被鍨婥ycle錛?br>    class Cycle
    {
    public:
        Cycle(double x, double y, double r);
        Cycle(Cycle const& c);
        Cycle& operator=(Cycle const& c);
        void swap(Cycle const& c);
        void load(xml init);
        void draw(device dev);
        double getX();
        double getY();
        double getR();
        void setX(double x);
        void setY(double y);
        void setR(double r);
    private:
        ...
    };
    鎴戜滑灝嗙被鍨婥ycle map鍒癱oncept Cycles涓婏細
      concept_map Cycles<Cycle>{}
    褰撴垜浠垱寤哄璞℃椂錛屽皢浼氬緱鍒板涓嬪浘鐨勭粨鏋勶細

runtime concept-2

    concept琛紙concept list錛変笉鍐嶅悓瀵硅薄鏀懼湪涓璧鳳紝鑰屾槸鍚屼竴涓被鍨嬬殑綾誨瀷淇℃伅鏀懼湪涓璧楓備竴鍚屾斁緗殑榪樻湁ctable銆俢table涓瘡涓搴旂殑concept欏歸兘鏈変竴涓寚鍚?concept琛ㄧ殑鎸囬拡錛堜篃鍙互鎸囧悜綾誨瀷淇℃伅澶達級錛岀敤浠ユ壘鍒癱oncept list錛屾墽琛宑oncept cast銆傚姩鎬佸璞★紝鎴栧姩鎬佸璞$殑寮曠敤/鎸囬拡涓婂彧闇闄勫姞涓涓寚鍚戠浉搴旂殑concept鐨勬寚閽堝嵆鍙傜浉姣斿墠涓涓柟妗堬紝鍐呭瓨鍒╃敤鐜囨洿楂樸?/p>

longshanks 2008-01-06 17:17 鍙戣〃璇勮
]]>琚瑙g殑C++&mdash;&mdash;姹夊凹鎷?/title><link>http://www.shnenglu.com/longshanks/archive/2007/12/17/38708.html</link><dc:creator>longshanks</dc:creator><author>longshanks</author><pubDate>Mon, 17 Dec 2007 03:28:00 GMT</pubDate><guid>http://www.shnenglu.com/longshanks/archive/2007/12/17/38708.html</guid><wfw:comment>http://www.shnenglu.com/longshanks/comments/38708.html</wfw:comment><comments>http://www.shnenglu.com/longshanks/archive/2007/12/17/38708.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.shnenglu.com/longshanks/comments/commentRss/38708.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/longshanks/services/trackbacks/38708.html</trackback:ping><description><![CDATA[<h1 align="center">琚瑙g殑C++鈥斺旀眽灝兼嫈</h1> <p align="center">by 鑾崕鏋? </p> <p><em>    鍏厓鍓?16騫?鏈?鏃ワ紝鎰忓ぇ鍒╀笢閮ㄥ鉤鍘燂紝涓涓彨鍋氬潕灝肩殑鍦版柟錛屼袱鏀ぇ鍐涙憜寮闃靛娍錛屽噯澶囧喅涓姝繪垬銆備竴鏂規槸鐢變繚緗楁柉鍜岀摝緗椾袱浣嶆墽鏀垮畼鐜囬鐨勭綏椹漢錛屽彟涓鏂瑰垯鏄紵澶х殑鍐涗簨澶╂墠姹夊凹鎷?宸村崱鐜囬鐨勮喀澶熀鍐涢槦鍙婂叾鍚岀洘銆傜綏椹漢瓚呰繃8涓囷紝鑰岃喀澶熀浠呮湁4涓囦綑浜恒傜劧鑰屽埌浜嗗倣鏅氾紝緗楅┈浜鴻褰誨簳鍑昏觸錛?涓囦漢琚潃錛屼粎鏈夊皯鏁板緱浠ラ冭劚銆傝繖灝辨槸钁楀悕鐨勫潕灝間細鎴樸傜粡姝や竴褰癸紝錛堝鍔犲厛鍓嶈繘琛岀殑鐗瑰埄姣斾簹鍜岀壒鎷夎タ姊呰婀栦細鎴橈級錛岀綏椹漢鍏冩皵澶т激錛屾垚騫村叕姘戞崯澶辮揪浜斿垎涔嬩竴銆傞儴鍒嗗煄閭﹁儗鍙涚綏椹紝瑗胯タ閲屼篃鍙戠敓璧蜂箟銆傜綏椹凡緇忓埌浜嗘憞鎽囨鍧犵殑鍦版銆?/em> </p> <p><em>    姹夊凹鎷旂殑榪欎簺鑳滃埄錛屽畬鍏ㄥ緱鐩婁簬鍏堝墠鐨勪竴嬈″紓涔庡甯哥殑榪滃緛銆傚叕鍏冨墠218騫達紝姹夊凹鎷旂巼棰嗗啗闃燂紝浠庢柊榪﹀お鍩哄煄錛堣タ鐝墮錛夊嚭鍙戯紝緲昏秺姣斿埄鐗涙柉灞憋紝榪涘叆鍗楅珮鍗㈠湴鍩熴傚湪浠栭潰鍓嶆湁涓ゆ潯璺彲璧幫紝緲昏秺闃垮皵淇炬柉灞憋紝鎴栬呮部嫻峰哺榪涘叆鎰忓ぇ鍒┿備絾鏄紝褰撴椂緗楅┈浜哄凡鍦ㄦ部嫻峰湴鍖洪儴緗蹭簡涓ゆ敮閮ㄩ槦錛屽噯澶囨嫤鎴眽灝兼嫈銆傝屼笖錛岀綏椹漢鐨勬搗鍐涗紭鍔匡紝浣垮緱浠栦滑鍙互鍦ㄤ換浣曟椂鍊欏皢涓鏀儴闃熺櫥闄嗗湪浠栫殑鑳屽悗銆傝岀炕瓚婇樋灝斾烤鏂北錛屽垯鏄竴鏉″強鍏惰壈闄╃殑閬撹礬錛屾洿浣曞喌鏄湪鍐ぉ銆?/em> </p> <p><em>    姹夊凹鎷旈夋嫨浜嗛樋灝斾烤鏂北銆備粬鐢╁紑浜嗙綏椹漢錛屼粠灝忓湥璐濈撼寰峰拰鏃ュ唴鐡﹀北涔嬮棿瓚婅繃闃垮皵淇炬柉灞憋紝榪涘叆鎰忓ぇ鍒╁鍐呫傛鏃訛紝緗楅┈浜轟究澶卞幓浜嗘垬鐣ョ旱娣憋紝涓鎶婂皷鍒宸茬粡娣辨繁鍦版彃鍏ヤ粬浠殑鑵瑰唴...</em> </p> <p>  </p> <p>    C++鐨勫彂灞曞彶涓婏紝涔熸湁鐫濡傚悓姹夊凹鎷旂炕瓚婇樋灝斾烤鏂北榪滃緛銆備竴鍒囪繕寰椾粠C with Class鏃朵唬璇磋搗銆? </p> <p>    Bjarne鏇劇粡鍙嶅寮鴻皟錛屼粬鍒涘緩C++涓虹殑鏄皢Simular鐨勬娊璞¤兘鍔涘悓C鐨勬ц兘緇撳悎璧鋒潵銆備簬鏄紝鍦–璇█鐨勫熀紜涓婏紝璇炵敓浜嗕竴縐嶆嫢鏈夌被銆佺戶鎵褲侀噸杞界瓑絳夐潰鍚戝璞℃満鍒剁殑璇█銆傚湪榪欎釜闃舵錛孋++鎻愪緵浜嗕袱涓柟闈㈢殑鎶借薄鑳藉姏銆備竴縐嶆槸鏁版嵁鎶借薄錛屼篃灝辨槸灝嗘暟鎹墍瑕佽〃杈劇殑鍚箟閫氳繃綾誨瀷浠ュ強渚濋檮浜庣被鍨嬩笂鐨勬垚鍛樿〃榪般傚彟涓縐嶅垯鏄鎬侊紝涓縐嶆渶鍘熷鐨勫鎬侊紙閲嶈澆錛夈? </p> <p>    鏁版嵁鎶借薄錛岄氳繃琚О涓?#8220;鎶借薄鏁版嵁綾誨瀷錛圓DT錛?#8221;鐨勬妧鏈疄鐜般侫DT鐨勪竴縐嶆柟妗堬紝灝辨槸綾匯傜被鎵鎻愪緵鐨勫皝瑁呮у皢涓涓暟鎹疄浣撶殑澶栧湪鐗瑰緛錛屾垨鑰呰璇箟鐨勮〃榪板艦寮忥紝鍚屽叿浣撶殑瀹炵幇錛屾瘮濡傛暟鎹瓨鍌ㄥ艦寮忥紝鍒嗙銆傝繖鏍鋒墍澧炲姞鐨勪腑闂村眰灝嗘暟鎹殑浣跨敤鑰呭悓鏁版嵁鐨勫疄鐜拌呴殧紱伙紝浣垮緱浠栦滑浣跨敤鍏卞悓鐨勭害瀹氳涔夊伐浣滐紝涓嶅啀鐩鎬簰浜嗚В褰兼鐨勭粏鑺傦紝浠庤屼嬌寰椾袱鑰呭緱浠ヨВ鑰︺? </p> <p>    澶氭佸垯鏄洿鍔犲熀紜鏇村姞閲嶈鐨勪竴縐嶇壒鎬с傚鎬佷嬌寰楁垜浠緱浠ョ敤鍚屼竴縐嶇鍙峰疄鐜版煇縐嶇‘瀹氱殑璇箟銆傚鎬佺殑綺鵑珦鍦ㄤ簬錛氫互涓縐嶅艦寮忚〃杈句竴縐嶈涔夈傚湪姝や箣鍓嶏紝鎴戜滑寰寰琚揩浣跨敤涓嶅悓鐨勭鍙鋒潵浠h〃鍚屼竴縐嶆娊璞¤涔夛紝涓虹殑鏄傚簲寮虹被鍨嬬郴緇熸墍鏂藉姞鐨勭害鏉熴傛瘮濡傦細 </p> <blockquote> <p>//浠g爜#1<br>int add_int(int lhs, int rhs);<br>float add_float(float lhs, float rhs);</p> </blockquote> <p>    寰堟樉鐒訛紝榪欎袱涓嚱鏁拌〃杈劇殑璇箟鍒嗗埆鏄?#8220;鎶婁袱涓猧nt綾誨瀷鍊煎姞鍦ㄤ竴璧?#8221;鍜?#8220;鎶婁袱涓猣loat綾誨瀷鍊煎姞鍦ㄤ竴璧?#8221;銆傝繖涓や釜璇箟鎶借薄璧鋒潵閮借〃杈句簡涓涓剰鎬濓細鍔犮? </p> <p>    鎴戜滑鍦ㄥ仛綆楁湳棰樼殑鏃跺欐槸涓嶄細綆¤璁$畻鐨勬暟瀛楁槸鏁存暟榪樻槸瀹炴暟銆傚悓鏍鳳紝濡傛灉鑳藉鍦ㄧ紪紼嬬殑鏃跺欙紝涓嶈冭檻綆楁湳鎿嶄綔瀵硅薄鐨勭被鍨嬶紝鍙渶鍏沖績璋佸拰璋佽繘琛屼粈涔堟搷浣滐紝閭d箞浼氭柟渚垮緱澶氥傚綋C++寮曞叆閲嶈澆鍚庯紝榪欑鎰挎湜渚垮緱浠ュ疄鐜幫細 </p> <blockquote> <p>//浠g爜#2<br>int add(int lhs, int rhs);<br>float add(float lhs, float rhs);</p> </blockquote> <p>    閲嶈澆浣垮緱鎴戜滑鍙渶鍏沖績“鍔?#8221;榪欎釜璇箟錛岃嚦浜庝粈涔堢被鍨嬪拰浠涔堢被鍨嬬浉鍔狅紝鍒欑敱緙栬瘧鍣ㄦ牴鎹搷浣滄暟鐨勭被鍨嬭嚜鍔ㄨВ鏋愩? </p> <p>    浠庢煇縐嶆剰涔変笂璇達紝閲嶈澆鏄闀挎湡蹇借錛屼絾鍗存瀬涓洪噸瑕佺殑涓涓璦鐗規с傚湪澶氭暟浠嬬粛OOP鐨勪功綾嶄腑錛岄噸杞藉線寰琚綔涓篛OP鐨勯檮灞炲搧錛屾斁鍦ㄤ竴浜涗笉璧風溂鐨勫湴鏂廣傚畠鐨勫鎬佹湰璐ㄤ篃琚姩澶氭佺殑浜洪犲厜鐜墍璁鵑伄钄姐傜劧鑰岋紝閲嶈澆鐨勯噸瑕佷綔鐢ㄥ嵈鍦ㄥ疄璺典腑娼滅Щ榛樺寲鍦頒綋鐜板嚭鏉ャ傞噸杞藉樊涓嶅鍙互鐪嬩綔璇█榪堝叆鐜頒唬鎶借薄浣撶郴鐨勭涓姝ャ傚畠鐨勫疄闄呮晥鐢ㄧ敋鑷寵瓚呰繃琚箍涓哄叧娉ㄧ殑OOP錛岃屼笉浼氬儚OOP閭f牱鍦ㄨ幏寰楁娊璞$殑鍚屾椂錛屼即闅忕潃涓嶅皬鐨勫壇浣滅敤銆? </p> <p>     闅忕潃铏氬嚱鏁扮殑寮曞叆錛孋++寮濮嬪叿澶囦簡棰囧叿浜夎鐨勫姩澶氭佹妧鏈傝櫄鍑芥暟鏄竴縐嶄緷闄勪簬綾伙紙OOP鐨勭被鍨嬪熀紜錛夌殑澶氭佹妧鏈傚叾鎶鏈熀紜鏄悗鏈熺粦瀹氾紙late-binding錛夈傚綋涓涓被D緇ф壙鑷被B鏃訛紝瀹冩湁涓ょ鏂規硶瑕嗙洊錛坥verride錛塀涓婄殑鏌愪釜鍑芥暟錛? </p> <blockquote> <p>//浠g爜#3<br>class B<br>{<br>public:<br>    void fun1();<br>    virtual void fun2();<br>}; </p> <p>class D:public B<br>{<br>public:<br>    void fun1();<br>    void fun2();<br>};</p> </blockquote> <p>    褰撶戶鎵跨被D涓0鏄庝簡鍚屽熀綾籅涓垚鍛樺嚱鏁扮浉鍚屽嚱鏁板悕銆佺浉鍚岀鍚嶇殑鎴愬憳鍑芥暟錛岄偅涔堝熀綾葷殑鎴愬憳鍑芥暟灝嗚瑕嗙洊銆傚浜庡熀綾葷殑闈炶櫄鎴愬憳鍑芥暟錛岀戶鎵跨被浼氱洿鎺ュ皢鍏墮伄钄姐傚浜庣被鍨婦鐨勪嬌鐢ㄨ咃紝fun1浠h〃浜咲涓墍璧嬩簣鐨勮涔夈傝岀被鍨婦鐨勫疄渚嬶紝鍙互闅愬紡鍦拌漿鎹㈡垚綾誨瀷B鐨勫紩鐢╞錛屾鏃惰皟鐢╞鐨刦un1錛屽垯鎵ц鐨勬槸綾籅鐨刦un1 瀹氫箟錛岃岄潪綾籇鐨刦un1錛屽敖綆℃鏃禸瀹為檯鎸囧悜涓涓狣鐨勫疄渚嬨? </p> <p>    浣嗘槸錛屽鏋滅戶鎵跨被瑕嗙洊浜嗗熀綾葷殑铏氬嚱鏁幫紝閭d箞灝嗗緱鍒扮浉鍙嶇殑緇撴灉錛氬綋璋冪敤寮曠敤b鐨刦un2錛屽疄闄呬笂鍗存槸璋冪敤浜咲鐨刦un2瀹氫箟銆傝繖琛ㄦ槑錛岃鐩栦竴涓櫄鍑芥暟錛屽皢浼氬湪緇ф壙綾誨拰鍩虹被涔嬮棿鐨勬墍鏈夊眰嬈′笂鎵ц瑕嗙洊銆傝繖縐嶅交搴曠殑銆佸叏鏂逛綅鐨勮鐩栬涓猴紝浣垮緱鎴戜滑鍙互鍦ㄧ戶鎵跨被涓婁慨楗版垨鎵╁睍鍩虹被鐨勫姛鑳芥垨琛屼負銆傝繖渚挎槸OOP鎵╁睍鏈哄埗鐨勫熀紜銆傝岃繖縐嶆妧鏈縐頒負鍔ㄥ鎬侊紝鎰忔濇槸鍩虹被寮曠敤鎵琛ㄨ揪鐨勮涔夊茍闈炲彇鍐充簬鍩虹被鏈韓錛岃屾槸鏉ユ簮浜庡畠鎵鎸囧悜鐨勫疄闄呭璞★紝鍥犳瀹冩槸“澶氭?#8221;鐨勩傚洜涓轟竴涓紩鐢ㄦ墍鎸囧悜鐨勫璞″彲浠ュ湪榪愯鏃跺彉鎹紝鎵浠ュ畠鏄?#8220;鍔?#8221;鐨勩? </p> <p>    闅忕潃鍔ㄥ鎬佽屾潵鐨勪竴涓?#8220;鍓駭鍝?#8221;錛屽嵈浜嬪疄涓婃垚涓轟簡OOP鐨勬牳蹇冨拰鏀煴銆傝櫄鍑芥暟鐨?#8220;鍔ㄥ鎬?#8221;鐗規у皢鎴戜滑寮曞悜涓涓瀬绔殑鎯呭喌錛氫竴涓兘鏄櫄鍑芥暟鐨勭被銆傛洿閲嶈鐨勶紝榪欎釜綾諱笂鐨勮櫄鍑芥暟閮芥病鏈夊疄鐜幫紝姣忎釜铏氬嚱鏁伴兘鏈浘鎸囧悜涓涓疄瀹炲湪鍦ㄧ殑鍑芥暟浣撱傚綋鐒訛紝榪欐牱鐨勭被鏄棤娉曠洿鎺ヤ嬌鐢ㄧ殑銆傛湁瓚g殑鏄紝榪欑琚О涓?#8220;鎶借薄鍩虹被”鐨勭被錛?strong>榪嬌</strong>鎴戜滑緇ф壙瀹冿紝騫?#8220;鏇垮畠”瀹炵幇閭d簺娌℃湁瀹炵幇鐨勮櫄鍑芥暟銆傝繖鏍鳳紝瀵逛簬涓涓娊璞″熀綾葷殑寮曠敤錛屽鎬佸湴鎷ユ湁浜嗙戶鎵跨被鐨勮涓恒傝屽弽榪囨潵錛屾娊璞″熀綾誨疄闄呬笂璧峰埌浜?strong>寮鴻揩</strong>緇ф壙綾誨疄鐜版煇浜涚壒瀹氬姛鑳界殑浣滅敤銆傚洜姝わ紝鎶借薄鍩虹被鎵紨浜?strong>鎺ュ彛</strong>鐨勮鑹層傛帴鍙e叿鏈変袱閲嶄綔鐢細涓銆佺害鏉熺戶鎵跨被錛堝疄鐜拌咃級榪嬌鍏跺疄鐜伴瀹氱殑鎴愬憳鍑芥暟錛堝姛鑳藉拰琛屼負錛夛紱浜屻佹弿榪頒簡緇ф壙綾誨繀瀹氭嫢鏈夌殑鎴愬憳鍑芥暟錛堝姛鑳藉拰琛屼負錛夈傝繖涓ょ浣滅敤淇冧嬌鎺ュ彛鎴愪負浜哋OP璁捐浣撶郴鐨勬敮鏌便? </p> <p>    C++鍦ㄨ繖鏂歸潰鐨勮繘姝ワ紝浣垮叾鎴愪負涓涓湡姝f剰涔変笂鍏峰鐜頒唬鎶借薄鑳藉姏鐨勮璦銆傜劧鑰岋紝榪欑榪涙騫墮潪“緲昏秺闃垮皵淇炬柉灞?#8221;銆傚厖鍏墮噺涔熷彧鑳界畻浣?#8220;緲昏秺姣斿埄鐗涙柉灞?#8221;銆傚浜嶤++鑰岃█錛岀湡姝h壈鑻︾殑榪滃緛鎵嶅垰寮濮嬶紝閭d護浜虹敓鐣忕殑“闃垮皵淇炬柉灞?#8221;浠嶅湪閬ヨ繙鐨勫墠鏂廣? </p> <p>    鍚屾眽灝兼嫈涓鏍鳳紝褰揅++涓鑴氳繄鍏?#8220;鐜頒唬鎶借薄璇█淇變箰閮?#8221;鍚庯紝渚塊潰涓翠袱縐嶉夋嫨銆傛垨鑰呭湪鍘熸湁鍩虹涓婁慨淇ˉ琛ワ紝鎴愪負涓縐峅OP璇█錛涙垨鑰呯戶緇墠榪涳紝緲昏秺閭e駭闄╁郴鐨勫北宄般侰++鐨勬眽灝兼嫈鈥斺擝jarne Stroustrup鈥斺旈夋嫨浜嗗悗鑰呫? </p> <p>    浠嶥&E鐨勬弿榪頒腑鎴戜滑鍙互鐪嬪埌錛屽湪C++鐨勫師濮嬭璁′腑灝卞凡緇忚冭檻“綾誨瀷鍙傛暟”鐨勯棶棰樸備絾鐩村埌90騫翠唬鍒濓紝鎵嶇湡姝f剰涔変笂鍦板疄鐜頒簡妯℃澘銆傜劧鑰岋紝妯℃澘鍙槸絎竴姝ャ傝濡侫da絳夎璦涓兘鏈夌被浼肩殑鏈哄埗錛堟硾鍨嬶紝generic錛夛紝浣嗗茍鏈褰撴椂鐨勭紪紼嬫妧鏈駭鐢熸牴鏈х殑褰卞搷銆? </p> <p>    鍏抽敭鎬х殑鎴愭灉鏉ユ簮浜嶢lex Stepanov鐨勮礎鐚係tepanov鍦ㄥ悗鏉ヨ縐頒負stl鐨勭畻娉?瀹瑰櫒搴撲笂鎵鍋氱殑鍔姏錛屼嬌寰椾竴縐嶆柊鍏寸殑緙栫▼鎶鏈斺旀硾鍨嬬紪紼嬶紙Generic Programming錛孏P錛夆斺旇繘鍏ヤ簡浜轟滑鐨勮閲庛俿tl鐨勪駭鐢熷C++鐨勬ā鏉挎満鍒朵駭鐢熶簡鏋佸叾閲嶈鐨勫獎鍝嶏紝淇冧嬌浜嗘ā鏉跨壒鍖栫殑璇炵敓銆傛ā鏉跨壒鍖栬〃闈笂鏄ā鏉跨殑杈呭姪鐗規э紝浣嗘槸瀹為檯涓婂畠鍗存槸姣?#8220;綾誨瀷鍙傛暟”鏇村姞鏈川鐨勬満鑳姐? </p> <p>    鍋囪鎴戜滑鏈変竴緇勫嚱鏁版墽琛屾瘮杈冧袱涓璞″ぇ灝忕殑鎿嶄綔錛? </p> <blockquote> <p>//浠g爜#4<br>int compare(int lhs, int rhs);<br>int compare(float lhs, float rhs);<br>int compare(string lhs, string rhs);</p> </blockquote> <p>    閲嶈澆浣垮緱鎴戜滑鍙互浠呯敤compare涓涓嚱鏁板悕鎵ц涓嶅悓綾誨瀷鐨勬瘮杈冩搷浣溿備絾鏄繖浜涘嚱鏁板叿鏈変竴鏍風殑瀹炵幇浠g爜銆傛ā鏉跨殑寮曞叆錛屼嬌寰楁垜浠彲浠ユ秷闄よ繖縐嶉噸澶嶄唬鐮侊細 </p> <blockquote> <p>//浠g爜#5<br>template<typename T> int compare(T lhs, T rhs) {<br>    if(lhs==rhs)<br>        return 0;<br>    if(lhs>rhs)<br>        return 1;<br>    if(lhs<rhs)<br>        return -1;<br>}</p> </blockquote> <p>    榪欐牱涓涓ā鏉垮彲浠ュ簲鐢ㄤ簬浠諱綍綾誨瀷錛屼笉浣嗙敤涓涓鍙瘋〃杈句簡涓涓涔夛紝鑰屼笖鐢ㄤ竴涓疄鐜頒唬鏇夸簡璇稿閲嶅浠g爜銆傝繖渚挎槸GP鐨勫熀鏈綔鐢ㄣ? </p> <p>    鎺ヤ笅鏉ョ殑鍙樺寲錛屽彲浠ョ畻浣滅湡姝f剰涔変笂鐨?#8220;鐧誨北”浜嗐? </p> <p>    濡傛灉鏈変袱涓寚閽堬紝鍒嗗埆鎸囧悜涓や釜鐩稿悓綾誨瀷鐨勫璞°傛鏃跺鏋滄垜浠噰鐢ㄤ笂榪癱ompare鍑芥暟妯℃澘錛岄偅涔堝皢鏃犳硶寰楀埌鎵闇鐨勭粨鏋溿傚洜涓烘鏃舵瘮杈冪殑鏄袱涓寚閽堢殑鍊鹼紝鑰屼笉鏄墍鎸囧悜鐨勫璞℃湰韜備負浜嗗簲浠樿繖縐嶇壒孌婃儏鍐碉紝鎴戜滑闇瑕佸compare鍋?#8220;鐗瑰埆澶勭悊”錛? </p> <blockquote> <p>//浠g爜#6<br>template<typename T> int compare(T* lhs, T* rhs) {<br>    if(*lhs==*rhs)<br>        return 0;<br>    if(*lhs>*rhs)<br>        return 1;<br>    if(*lhs<*rhs)<br>        return -1;<br>}</p> </blockquote> <p>    榪欎釜“鐗規畩鐗堟湰”鐨刢ompare錛屽浜庝換浣曠被鍨嬬殑鎸囬拡浣滃嚭鍝嶅簲銆傚鏋滆皟鐢ㄦ椂鐨勫疄鍙傛槸涓涓寚閽堬紝閭d箞榪欎釜“鎸囬拡鐗?#8221;鐨刢ompare灝嗕細寰楀埌浼樺厛鍖歸厤銆傚鏋滄垜浠皢compare鏀規垚涓嬮潰鐨勫疄鐜幫紝閭d箞灝變細鍑虹幇闈炲父鏈夎叮鐨勮涓猴細 </p> <blockquote> <p>//浠g爜#7<br>template<typename T><br>struct comp_impl<br>{<br>    int operator()(T lhs, T rhs) {<br>        if(lhs==rhs)<br>            return 0;<br>        if(lhs>rhs)<br>            return 1;<br>        if(lhs<rhs)<br>            return -1;<br>    }<br>};<br>template<typename T><br>struct comp_impl<T*><br>{<br>    int operator()(T* lhs, T* rhs) {<br>        comp_impl<T>()(*lhs, *rhs);<br>    }<br>};<br>template<typename T> int compare(T* lhs, T* rhs) {<br>    comp_impl<T>()(*lhs, *rhs);<br>}</p> </blockquote> <p>    褰撴垜浠皢鎸囬拡鐨勬寚閽堜綔涓哄疄鍙傦紝璋冪敤compare鏃訛紝紲炲鐨勪簨鎯呭彂鐢熶簡錛? </p> <blockquote> <p>//浠g爜#8<br>double **x, **y;<br>compare(x, y);</p> </blockquote> <p>    compare灞呯劧鎴愬姛鍦板墺紱諱簡涓や釜鎸囬拡錛屽茍涓旀紜湴姣旇緝浜嗕袱涓璞$殑鍊箋傝繖涓垙娉曞厖鍒嗗埄鐢ㄤ簡綾繪ā鏉跨殑灞閮ㄧ壒鍖栧拰鐗瑰寲瑙f瀽瑙勫垯銆傛牴鎹鍒欙紝瓚婃槸鐗瑰寲鐨勬ā鏉匡紝瓚婃槸浼樺厛鍖歸厤銆俆*鐗堢殑comp_impl姣擳鐗堢殑鏇村姞“鐗瑰寲”錛屼細寰楀埌浼樺厛鍖歸厤銆傞偅涔堝綋涓涓寚閽堢殑鎸囬拡瀹炰緥鍖朿omp_impl錛屽垯浼氬尮閰峊*鐗堢殑 comp_impl錛屽洜涓烘寚閽堢殑鎸囬拡錛屼篃鏄寚閽堛俆*鐗堥氳繃灞閮ㄧ壒鍖栨満鍒訛紝鍓ョ鎺変竴綰ф寚閽堬紝鐒跺悗鐢ㄦ墍寰楃殑綾誨瀷瀹炰緥鍖朿omp_impl銆傛寚閽堢殑鎸囬拡鍓ョ鎺変竴綰ф寚閽堬紝閭d箞榪樻槸涓涓寚閽堬紝鍙堜細鍖歸厤T*鐗堛俆*鐗堝張浼氬墺紱繪帀涓綰ф寚閽堬紝鍓╀笅鐨勫氨鏄湡姝e彲浠ユ瘮杈冪殑綾誨瀷鈥斺攄ouble銆傛鏃訛紝double宸叉棤娉曚笌 T*鐗堟湰鍖歸厤錛屽彧鑳藉尮閰嶅熀紜妯℃澘錛屾墽琛岀湡姝g殑姣旇緝鎿嶄綔銆? </p> <p>    榪欑濂囧鐨勬墜娉曟槸钑村惈鍦ㄦā鏉跨壒鍖栦腑涓浜涙洿鍔犳湰璐ㄧ殑鏈哄埗鐨勭粨鏋溿傝繖縐嶆剰澶栬幏寰楃殑“妯℃澘琛嶇敓浜у搧”鍙互綆椾綔涓縐嶇紪璇戞椂璁$畻鐨勮兘鍔涳紝鍚庢潵琚竴浜?#8220;濂戒簨鑰?#8221;鍙戝睍鎴愮嫭绔嬬殑“妯℃澘鍏冪紪紼?#8221;錛圱emplate Meta Programming錛孴MP錛夈? </p> <p>    灝界TMP鏂板鑰屽張濂ュ錛屼絾緇堢┒鍙槸涓縐嶈緟鍔╂妧鏈紝鐢ㄦ潵寮ヨˉC++鐨勪竴浜涚己闄楓佸仛涓浜涙墿灞曪紝“鎹′釜婕?#8221;浠涔堢殑銆備笉榪囧畠涓烘垜浠甫鏉ヤ簡涓ょ偣閲嶈鐨勫惎紺猴細涓銆佹垜浠湁鍙兘閫氳繃璇█鏈韓鐨勪竴浜涙満鍒訛紝榪涜鍏冪紪紼嬶紱浜屻佸厓緙栫▼鍦ㄤ竴瀹氱▼搴︿笂鍙互鍚岄氱敤璇█涓璧蜂嬌鐢ㄣ傝繖浜涘惎紺哄緙栫▼璇█鐨勫彂灞曟湁寰堝ソ鐨勬寚瀵兼剰涔夈? </p> <p>    妯℃澘鍙婄壒鍖栬鍒欐槸C++ GP鐨勬牳蹇冩墍鍦ㄣ傝繖浜涜璦鐗規х殑寮哄ぇ鑳藉姏騫墮潪鍑┖鑰屾潵銆傚疄闄呬笂鏈変竴鍙?#8220;騫曞悗澶ф墜”鍦ㄥ啣鍐ヤ箣涓搷綰電潃涓鍒囥? </p> <p>    鍋囪鏈変竴涓被鍨嬬郴緇燂紝鍖呭惈n涓被鍨嬶細t1,...,tn錛岄偅涔堣繖浜涚被鍨嬫瀯鎴愪簡涓涓泦鍚圱={t1,...,tn}銆傚湪褰撴垜浠繍鐢ㄩ噸杞芥妧鏈椂錛屽疄闄呬笂鏋勯犱簡涓緇勭被鍨嬬殑tuple鍒板嚱鏁板疄鐜扮殑鏄犲皠錛?lt;ti1,ti2,ti3,...> ->fj()銆傜紪璇戝櫒鍦ㄩ噸杞借В鏋愮殑鏃跺欙紝灝辨槸鎸夌収榪欑粍鏄犲皠瀵繪壘鍖歸厤鐨勫嚱鏁扮増鏈傚綋鎴戜滑緙栧啓浜嗗艦濡備唬鐮?5鐨勬ā鏉匡紝閭d箞灝辯浉褰撲簬鏋勫緩浜嗘槧灝勶細<T, T,...> ->f0()銆? </p> <p>    鑰屼唬鐮?6錛屼互鍙婁唬鐮?7涓殑T*鐗堟ā鏉匡紝瀹為檯涓婃槸鏋勯犱簡涓涓?lt;Tp>->fp()鐨勬槧灝勩傝繖閲孴p鏄疶鐨勪竴涓瓙闆嗭細Tp={t'|t'=ti*, ti∈T}銆傛崲鍙ヨ瘽璇達紝鐗瑰寲浣挎硾鍨嬩綋緋葷粏鍖栦簡銆傚埄鐢ㄦā鏉跨壒鍖栨妧鏈紝鎴戜滑宸茬粡鑳藉錛堢鎷欏湴錛夊垎杈ㄦ誕鐐規暟銆佹暣鏁般佸唴緗被鍨嬨佸唴緗暟緇勩佺被銆佹灇涓劇瓑絳夌被鍨嬨傚叿澶囦負綾誨瀷鍒掑垎鐨勮兘鍔涳紝涔熷氨鏄瀯閫犱笉鍚岀殑綾誨瀷瀛愰泦鐨勮兘鍔涖? </p> <p>    鐜板湪錛屾垜浠究鍙互鏋勯犱竴涓?#8220;娉涘瀷浣撶郴”錛欸={T} U T U Tp U Ta U Ti U Tf U Tc ...銆傚叾涓紝Tp鏄墍鏈夋寚閽堢被鍨嬶紝Ta鏄暟緇勶紝Ti鏄暣鏁幫紝Tf鏄誕鐐規暟錛孴c鏄被絳夌瓑銆備絾鏄鏋滄垜浠寜鐓ф硾鍖栫▼搴︼紝鎶奊涓殑鍏冪礌鎺掑垪寮錛歿T, Tp, Ta, Ti,...,t1,...,tn}銆傛垜浠細鍙戠幇榪欎腑闂村瓨鍦ㄤ竴浜?#8220;鏂眰”銆傝繖浜涙柇灞備綅浜嶵鍜孴p絳変箣闂達紝浠ュ強Tp絳変笌ti絳変箣闂寸瓑絳夈傝繖琛ㄦ槑鍦–++98/03涓紝鎶借薄浣撶郴涓嶅瀹屾暣錛屽瓨鍦ㄧ己闄楓? </p> <p>    鎵浠ワ紝鍒扮洰鍓嶄負姝紝C++榪樻病鏈夌湡姝g炕瓚婇樋灝斾烤鏂北閲岄偅搴ф渶闄╁郴鐨勫北宄般傝繖姝f槸C++0x姝e湪鍔姏鍋氱殑錛岃屼笖鑳滃埄鍦ㄦ湜銆? </p> <p>    鍦–++0x涓紝澶х墰浠紩鍏ヤ簡first-class鐨刢oncept鏀寔銆俢oncept鐩墠榪樻病鏈夋寮忕殑娉曞畾鎻忚堪錛堜互鍙婂悎鐞嗙殑涓枃緲昏瘧錛夈傞氫織鍦拌錛宑oncept鎻忚堪浜嗕竴涓被鍨嬬殑錛堟帴鍙o級鐗瑰緛銆傝鍏蜂綋鐨勶紝涓涓猚oncept鎻忚堪浜嗙被鍨嬪繀欏誨叿澶囩殑鍏叡鎴愬憳鍑芥暟錛屽繀欏誨叿澶囩殑鏂藉姞鍦ㄨ綾誨瀷涓婄殑鑷敱鍑芥暟錛堝拰鎿嶄綔絎︼級錛屼互鍙婂繀欏誨叿澶囩殑鍏朵粬鐗瑰緛錛堥氳繃闂存帴鎵嬫錛夈備笅闈㈡槸涓涓吀鍨嬬殑concept錛? </p> <blockquote> <p>concept has_equal<T><br>{<br>    bool T::equal(T const& v);<br>};</p> </blockquote> <p>    榪欎釜concept鍛婅瘔鎴戜滑瀹冩墍鎻忚堪鐨勭被鍨嬪繀欏繪湁涓涓猠qual鎴愬憳錛屼互鍙︿竴涓悓綾誨瀷鐨勫璞′負鍙傛暟銆傚綋鎴戜滑灝嗚繖涓猚oncept鏂藉姞鍦ㄤ竴涓嚱鏁版ā鏉夸笂錛屽茍浣滀負瀵圭被鍨嬪弬鏁扮殑綰︽潫錛岄偅涔堝氨琛ㄦ槑浜嗚繖涓ā鏉垮綾誨瀷鍙傛暟鐨勮姹傦細 </p> <blockquote> <p>template<has_equal T>bool is_equal(T& lhs, T const& rhs) {<br>    return lhs.equal(rhs);<br>}</p> </blockquote> <p>    濡傛灉瀹炲弬瀵硅薄鐨勭被鍨嬫病鏈塭qual鎴愬憳錛岄偅涔坕s_equal灝嗕細鎷掔粷緙栬瘧閫氳繃錛氳繖涓嶆槸鎴戣鐨勶紒 </p> <p>    concept鏄彲浠ョ粍鍚堢殑錛屾寮忕殑鏈鍙仛“refine”銆傛垜浠彲浠ラ氳繃refine榪涗竴姝ユ瀯閫犲嚭綰︽潫鏇村己鐨刢oncept錛? </p> <blockquote> <p>concept my_concept<T> : has_equal<T>, DefaultConstructable<T>, Swappable<T> {}</p> </blockquote> <p>    refine鑾峰緱鐨刢oncept灝嗕細“緇ф壙”閭d簺“鍩篶oncept”鐨勬墍鏈夌害鏉熴備綔涓烘洿緇嗚嚧鐨勭粍鍚堟墜孌碉紝concept榪樺彲浠ラ氳繃!鎿嶄綔絎?#8220;鍘繪帀”鏌愪簺鍐呮兜鐨刢oncept綰︽潫錛? </p> <blockquote> <p>concept my_concept1<T> : has_equal<T>, !DefaultConstructable<T> {}</p> </blockquote> <p>    榪欎釜concept瑕佹眰綾誨瀷鍏峰equal鎴愬憳錛屼絾涓嶈兘鏈夐粯璁ゆ瀯閫犲嚱鏁般? </p> <p>    閫氳繃榪欎簺鎵嬫錛宑oncept鍙互“鏃犻檺緇嗗垎”綾誨瀷闆嗗悎T銆傜悊璁轟笂錛屾垜浠彲浠ュ埗閫犱竴榪炰覆鍙浉宸竴涓嚱鏁版垨鑰呭彧鐩稿樊涓涓弬鏁扮殑concept銆? </p> <p>    涓涓猚oncept瀹為檯涓婂氨鏄瀯鎴愮被鍨嬮泦鍚圱鐨勫垝鍒嗙殑綰︽潫錛歍x={ti| Cx(ti)==true, ti∈T}銆傚叾涓瑿x灝辨槸concept鎵鏋勯犵殑綰︽潫銆備笉鍚岀殑concept鏈夌潃涓嶅悓鑼冨洿鐨勭害鏉熴傝繖鏍鳳紝鐞嗚涓婃垜浠彲浠ヨ繍鐢╟oncept鏋氫婦鍑虹被鍨嬮泦鍚?T鐨勬墍鏈夊瓙闆嗐傝岃繖浜涘瓙闆嗗垯姝eソ濉ˉ浜嗕笂榪癎涓殑閭d簺鏂眰銆傛崲鍙ヨ瘽璇達紝concept緇嗗寲浜嗙被鍨嬪垝鍒嗙殑綺掑害錛屾垨鑰呰娉涘瀷鐨勭矑搴︺備嬌寰?#8220;紱繪暎”鐨勬硾鍨嬬郴緇熷彉鎴?#8220;榪炵畫”鐨勩? </p> <p>    褰撴垜浠繍鐢╟oncept綰︽潫涓涓嚱鏁版ā鏉跨殑綾誨瀷鍙傛暟鏃訛紝鐩稿綋浜庣敤concept鎵鎻忚堪鐨勭被鍨嬪瓙闆嗘瀯寤轟竴涓槧灝勶細<Tx1,Tx2,...>->fx()銆傚嚒鏄鍚坱uple <Tx1,Tx2,...>鐨勭被鍨嬬粍鍚堬紝瀵瑰簲fx()銆傛墍浠ワ紝浠庤繖涓搴﹁岃█錛屽嚱鏁版ā鏉跨殑鐗瑰寲錛堝寘鎷琧oncept錛夊彲浠ョ湅浣滃嚱鏁伴噸杞界殑涓縐嶆墿灞曘傚湪concept鐨勪績榪涗笅錛屾垜浠究鍙互鎶婂嚱鏁版ā鏉跨壒鍖栧拰鍑芥暟閲嶈澆緇熶竴鍦ㄤ竴涓綋緋諱笅澶勭悊錛屼嬌鐢ㄥ叡鍚岀殑瑙勫垯瑙f瀽銆? </p> <p>    鍦ㄧ洰鍓嶉樁孌碉紝C++宸笉澶氬凡緇忕櫥涓婁簡“鎶借薄闃垮皵淇炬柉灞?#8221;鐨勯《宄般備絾鏄氨濡傚悓姹夊凹鎷旇繘鍏ユ剰澶у埄鍚庯紝榪橀渶瑕侀潰瀵瑰己鐩涚殑緗楅┈鍏卞拰鍥斤紝涓庝箣浣滄垬閭f牱銆侰++鐨勯潰鍓嶈繕闇瑕佽繘涓姝ュ皢浼樺娍鍖栦綔鑳滃埄銆傝鍋氱殑浜嬭繕寰堝錛屽叾涓渶閲嶈鐨勶紝褰撳睘鏋勫緩Runtime GP銆傜洰鍓岰++鐨凣P鏄紪璇戞椂鏈哄埗銆傚浜庤繍琛屾椂鍐蟲柇鐨勪換鍔★紝榪橀渶瑕佹眰鍔╀簬OOP鐨勫姩澶氭併備絾鏄疌++棰嗗煙鐨勫ぇ鐗涗滑宸茬粡鐫鎵嬪湪Runtime GP鍜孯untime Concept絳夋柟闈㈠睍寮鍔姏銆傝繖鏂歸潰鐨勬渶鏂版垚鏋滃彲浠ョ湅<a >榪欓噷</a>銆?a >榪欓噷</a>鍜?a >榪欓噷</a>銆傜浉淇$粡榪囪嫢騫插勾鐨勫姫鍔涘悗錛孏P灝嗕細瀹屽叏鐨勬垚鐔燂紝鎴愪負鐪熸涓繪祦鐨勭紪紼嬫妧鏈? </p> <p> </p> <p><em>    鍧庡凹浼氭垬涔嬪悗錛屾眽灝兼嫈宸茬粡鎷ユ湁浜嗙粷瀵圭殑浼樺娍銆傜綏椹漢宸茬粡鎴樿觸錛屼粬鍚岀綏椹煄涔嬮棿宸茬粡娌℃湁浠諱綍寮哄ぇ鐨勬晫瀵瑰姏閲忥紝緗楅┈浜轟篃宸茬粡闂婚涓ц儐錛屽嚑鏃犳枟蹇椼備絾鏄紝姹夊凹鎷斿嵈鐘笅浜嗘垨璁鎬護浠栦竴鐢熷悗鎮旂殑閿欒銆備粬鏀捐繃浜嗙綏椹煄錛岃漿鑰屾敾鍑葷綏椹殑鍗楅儴鍩庨偊鍜屽悓鐩熴備粬浣庝及浜嗙綏椹漢鐨勬剰蹇楋紝浠ュ強緗楅┈鍚岀洘鐨勭墷鍥虹▼搴︺傜綏椹漢寰堝揩緇撴潫浜嗘渶鍒濈殑娣蜂貢錛屼換鍛戒簡鏂扮殑鎵ф斂瀹橈紝閲囩敤浜嗗潥澹佹竻閲庛佷互鏌斿厠鍒氱殑鏂版垬鐣ャ傞殢鐫鏃墮棿鐨勬帹縐伙紝姹夊凹鎷斿拰浠栫殑鍐涢槦闄愪簬瀛ょ珛鏃犳彺鐨勫鍦幫紝琚揩涓轟簡鐢熷瓨鑰屼綔鎴樸傚敖綆¤揩闄嶅茍鍗犻浜嗗嚑涓綏椹煄甯傦紝浣嗘槸緇堢┒鏃犳硶鍐嶆鑾峰緱緇欎簣緗楅┈浜鴻嚧鍛戒竴鍑葷殑鏈轟細銆?/em></p> <p><em>    姹夊凹鎷旂殑鎴樼暐閿欒瀹為檯涓婂湪浠庢柊榪﹀お鍩哄煄鍑哄彂涔嬪墠宸茬粡娉ㄥ畾銆傚洜涓烘眽灝兼嫈瀵圭綏椹漢鐨勮繙寰佺殑鏍規湰鐩殑騫墮潪鍑繪簝騫跺崰棰嗙綏椹紝鑰屾槸閫氳繃鎵撳嚮緗楅┈錛屽墛寮變粬浠殑鍔垮姏錛岀摝瑙d粬浠殑鑱旂洘銆備互杈懼埌瀵繪眰絳捐鍜屽鉤鍗忚鐨勭洰鐨勩傜劧鑰岃繖縐嶆湁闄愭垬鐣ュ嵈浣垮鑷翠簡浠栫殑鏈緇堝け璐ャ?/em></p> <p><em></em> </p> <p>    涓嶅垢鐨勬槸錛孋++鎴栧鎴栧皯鍦版湁鐫鍚屾眽灝兼嫈涓鏍風殑鎴樼暐閿欒銆侰++鏈鍒濈殑鐩殑鍩烘湰涓婁粎浠呭眬闄愪簬“鏇村ソ鐨凜”銆傚茍涓斿叏闈㈠吋瀹笴銆傝繖鍦ㄥ綋鏃朵技涔庡緢鍚堢悊錛屽洜涓篊鍙互綆椾綔鏈鎴愬姛鐨?#8220;搴曞眰楂樼駭璇█”錛屾嫢鏈夊緢楂樼殑鎬ц兘鍜岀伒媧繪с備絾鏄紝C鐨勮璁″茍鏈冭檻灝嗘潵浼氭湁涓涓彨鍋?#8220;C++”鐨勮璦鏉ュ鍏惰繘琛屾墿灞曘傜粨鏋滃緢澶氫紭鐐瑰浜嶤鑰岃█鏄紭鐐癸紝浣嗗嵈鎴愪簡C++鐨勮礋鎷呫傛瘮濡傦紝C澶ч噺浣跨敤鎿嶄綔絎﹁〃杈捐娉曠粨鏋勶紝瀵逛簬C鑰岃█鏄懼緱闈炲父綆媧侊紝浣嗗浜嶤++錛屽垯浣垮叾琚揩澶ц妯″鐢ㄦ搷浣滅錛屼負鍏跺悗鍑虹幇鐨勫緢澶氳娉曠己闄峰煁涓嬩簡浼忕瑪銆傝繖涓鐐逛笂錛孉da鍋氬緱鐩稿鎴愮啛浜涖傚畠浠嶱ascal閭i噷緇ф壙浜嗕富瑕佽娉曪紝浣嗕笉鑰冭檻鍏煎銆傝繖浣垮緱Ada鏇村姞瀹屾暣錛屾槗浜庡彂灞曘傛柊璇█灝辨槸鏂拌璦錛岃繃鍒嗙殑鍏煎鏄暎閾愶紝涓嶆槸浼樺娍銆傝屼笖錛屽悎鐞嗗湴緇ф壙璇硶錛屽悓鏍峰彲浠ュ惛寮曚紬澶氬紑鍙戣呫備粠緇忛獙鏉ョ湅錛岀▼搴忓憳瀵逛簬璇硶鍙樺寲鐨勬壙鍙楄兘鍔涜繕鏄緢寮虹殑銆備粬浠洿澶氬湴鍏沖績璇█鐨勫姛鑳藉拰鏄撶敤鎬с?/p> <p>    鍙︿竴鏂歸潰錛孋++鏈鍒濆茍鏈妸鐩爣瀹氬湪“鍒涘緩涓縐嶉珮搴︽娊璞★紝鍙堢‘淇濇ц兘鐨勮璦”銆傜旱瑙侰++鐨勫彂灞曪紝鍚勭鎶借薄鏈哄埗騫墮潪鍦ㄥ畬鏁寸殑瑙勫垝鎴栬礬綰垮浘鐨勬寚瀵間笅鍔犲叆璇█銆傛墍鏈夐珮綰х壒鎬ч兘鏄互“娣繪補鎴樻湳”闆舵墦紕庢暡鍦板姞鍏ヨ璦銆備粠鏌愮紼嬪害涓婃潵鐪嬶紝C++鏇村儚鏄竴縐嶅疄楠屾ц璦錛岃岄潪宸ヤ笟璇█銆侰++鐨勫己澶у姛鑳藉拰浼樼偣鏄暱鏈熺Н绱幏寰楃殑錛岃屽畠鐨勮澶氱己闄蜂篃鏄暱鏈熸坊鍔犵壒鎬х殑緇撴灉銆?/p> <p>    姹夊凹鎷斿拰C++緇欎簣鎴戜滑涓涓緢濂界殑鏁欒銆傚浜庝竴涓瘯鍥懼湪1銆?0騫村悗渚濈劧鍋ュ悍鎴愰暱鐨勮璦錛岄偅涔堝氨蹇呴』鍦ㄦ渶鍒濅究鎷ユ湁鏄庣‘鐨勭洰鏍囧拰鎶鏈彂灞曡鍒掋傚浜庝互寰鐨勮璦鐗規у簲褰撴嫨浼樿屽彇錛屼笉鑳界収鍗曞叏鏀躲傚茍涓斿湪鎶鏈笂鎷ユ湁瓚沖鐨勫墠鐬繪с傛垜浠煡閬擄紝鎶鏈墠鐬繪ф槸寰堥毦鍋氬埌鐨勶紝姣曠珶鎶鏈彂灞曞お蹇傚鏋滃仛涓嶅埌錛岄偅灝卞緱鏈夎凍澶熺殑欖勫姏瀵硅繃鍘葷殑涓滆タ鍔犱互鍙栬垗銆傛墍璋?#8220;鑸嶅皬灝卞ぇ錛屽純瀛愪簤鍏?#8221;銆?/p> <p>    鎬諱綋鑰岃█錛孋++鍦ㄦ娊璞℃満鍒剁殑鍙戝睍鏂歸潰錛岃繕綆楁槸鎴愬姛鐨勩傚敖綆′即闅忕潃涓嶅皯鎶鏈己闄鳳紝浣嗘槸C++鐨勬娊璞¤兘鍔涘湪鍚勭璇█涓彲縐板緱涓婂嚭綾繪嫈钀冦傝屼笖C++榪樺湪鍙戝睍錛屽畠鏈潵灝嗕細鍙戝睍鎴愪粈涔堝艦鎬侊紝涓嶅緱鑰岀煡銆備絾鏄紝鏃犺C++鏄戶緇慨淇ˉ琛ワ紝榪樻槸鏍規湰鎬у湴鍙橀潻錛屽畠鐨勬娊璞¤兘鍔涢兘浼氫笉鎶樹笉鎵e湴淇濈暀錛屽茍涓斾笉鏂畬鍠勫拰澧炲己銆?/p> <p> </p> <p><em>    鍧庡凹浼氭垬涔嬪悗錛屾眽灝兼嫈鍙堟墦榪囧嚑嬈″皬瑙勬ā鐨勮儨浠椼備絾緇忚繃闀挎湡鐨勪綔鎴橈紝涔熷緱涓嶅埌榪﹀お鍩虹殑鏀彺錛屾眽灝兼嫈鐨勫姏閲忚秺鏉ヨ秺寮憋紝鍙兘鍦ㄦ剰澶у埄鍗婂矝涓婂媺寮虹敓瀛樸傜綏椹緢蹇仮澶嶄簡鍏冩皵錛屾敼闈╀簡鍐涗簨浣撶郴鍜屼綔鎴樻柟寮忥紝閲嶆柊鎺屾彙浜嗘垬鐣ヤ富鍔ㄦ潈銆傛洿閲嶈鐨勬槸錛岀綏椹篃鏈変簡鑷繁鐨?#8220;姹夊凹鎷?#8221;鈥斺旓紙寰佹湇闈炴床鐨勶級鏅竷鍒╀箤鏂?#183;縐戝皵鍐呭埄涔屾柉·瑗垮簢闃匡紙澶цタ搴囬樋錛夈傝タ搴囬樋琚淳寰鍖楅潪澶ч檰錛岀洿鎺ユ敾鍑昏喀澶熀浜虹殑鑰佸發銆傛眽灝兼嫈琚彫鍥烇紝鍦ㄦ墡椹笌瑗垮簢闃挎憜寮闃靛娍錛屽睍寮涓鍦哄喅鎴樸傛渶緇堬紝瑗垮簢闃胯繍鐢ㄤ粠姹夊凹鎷旈偅閲屽鍒扮殑鎴樻湳鍑繪簝浜嗚喀澶熀浜猴紝涓虹綏椹漢璧㈠緱浜嗙浜屾甯冨尶鎴樹簤鐨勮儨鍒┿?/em></p> <p><em>    姝ゅ悗錛屾眽灝兼嫈鍦ㄧ綏椹漢鐨勯氱級涔嬩笅錛屾祦浜′簬鍦頒腑嫻鋒部宀革紝璇曞浘瀵繪眰涓滃北鍐嶈搗鐨勬満浼氥備絾鏈緇堟湭鑳藉鎰匡紝琚揩浜庡叕鍏冨墠183騫磋嚜灝斤紝浜勾64宀併傛湁瓚g殑鏄紝浠栫殑鑰佸鎵嬶紝灝忎粬12宀佺殑瑗垮簢闃夸篃浜庡悓騫村幓涓栥備竴涓紵澶х殑浼犲灝辨緇撴潫銆?/em></p><img src ="http://www.shnenglu.com/longshanks/aggbug/38708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/longshanks/" target="_blank">longshanks</a> 2007-12-17 11:28 <a href="http://www.shnenglu.com/longshanks/archive/2007/12/17/38708.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OOP鐨勯粍鏄?/title><link>http://www.shnenglu.com/longshanks/archive/2007/12/06/37915.html</link><dc:creator>longshanks</dc:creator><author>longshanks</author><pubDate>Thu, 06 Dec 2007 09:20:00 GMT</pubDate><guid>http://www.shnenglu.com/longshanks/archive/2007/12/06/37915.html</guid><wfw:comment>http://www.shnenglu.com/longshanks/comments/37915.html</wfw:comment><comments>http://www.shnenglu.com/longshanks/archive/2007/12/06/37915.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.shnenglu.com/longshanks/comments/commentRss/37915.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/longshanks/services/trackbacks/37915.html</trackback:ping><description><![CDATA[    <em>鏈枃鏉ユ簮浜?a title="TopLanguage group" id="bilj">TopLanguage Group</a> 涓婄殑涓嬈¤璁猴紙<a title="榪欓噷" id="g_hv">榪欓噷</a> 錛?a title="榪欓噷" id="nflo">榪欓噷</a> 鍜?a title="榪欓噷" id="pamp">榪欓噷</a> 錛夈俻ongba鎻愬嚭錛欳++鐨勬娊璞℃満鍒跺茍涓嶅畬鍠勶紝鍘熷洜鏄負浜嗘ц兘鑰屽仛鐨勬姌涓紝鏈潵闅忕潃璁$畻鑳藉姏鐨勬彁楂樺埌涓瀹氱▼搴︼紝浜轟滑灝辮兘澶熷拷鐣?/em><em>鏇村ソ鐨勬娊璞℃墍甯︽潵鐨勮礋闈㈡晥搴?/em><em>銆傚氨姝よ鑰佸ぇ鍚勮嚜鎻愬嚭楂樿錛屽彈鐩婅壇澶氬晩銆傜粡榪囪璁猴紝鎴戝熀鏈笂鐞嗚В浜唒ongba鐨勬兂娉曘備絾鎴戣寰楃瓑寰呰綆楁満鐨勬ц兘鎻愰珮澶秷鏋佷簡銆傛垜鐩鎬俊闅忕潃緙栫▼鎶鏈殑鍙戝睍錛岃繖縐嶆渶浼樻娊璞¢犳垚鐨勬ц兘鎹熷け灝嗕細瓚婃潵瓚婂皬銆傝繖縐嶉斿緞灝嗕細鏇村揩鍦拌浜轟滑鎺ュ彈鏈浼樻娊璞″艦寮忋?/em><br> <br>     鍦?#8220;C++ Template”涓涔︿腑錛屽皢澶氭佹葷粨涓轟笁縐嶄富瑕佺被鍨嬶細runtime bound銆乻tatic unbound鍜宺untime unbound銆傚叾涓璻untime bound灝辨槸鎴戜滑閫氬父鎵璇寸殑鍔ㄥ鎬侊紝OOP鐨勬牳蹇冩敮鏌憋紙騫夸箟涓奜OP榪樺寘鎷琌bject Base錛圤B錛屼粎鎸囩被鍨嬪皝瑁呯瓑OO鐨勫熀鏈壒鎬э級錛屼絾鏈夋椂涔熶細灝哋B鍜孫OP鍒嗗紑錛孫OP鍗曟寚浠O涓哄熀紜鐨勫姩澶氭併傝繖閲屼嬌鐢ㄧ嫮涔夌殑OOP鍚箟錛夛紱 static unbound灝辨槸闈欏鎬侊紝閫氳繃妯℃澘瀹炵幇銆傝宺untime unbound鍒欐槸涓縐嶄笉甯歌鐨勫艦寮忋傛棭騫寸殑SmallTalk鍏鋒湁榪欑褰㈠紡錛岀幇鍦ㄧ殑ruby涔熷紩鍏ヨ繖縐嶆満鍒躲?br>     鍦ㄤ富嫻佺殑錛堥潤鎬侊級璇█涓紝鎴戜滑浼氶潰涓翠袱縐嶇被鍨嬬殑澶氭侀渶姹傦細瀵逛簬緙栬瘧鏈熷彲浠ョ‘瀹氱被鍨嬬殑錛屼嬌鐢ㄩ潤澶氭侊紝姣斿瀹炰緥鍖栦竴涓鍣紱瀵逛簬榪愯鏈熸柟鑳界‘瀹氱被鍨嬬殑錛屽垯浣跨敤 鍔ㄥ鎬併傝宺untime unbound涔熷彲浠ョ敤浜庤繍琛屾湡綾誨瀷鍐蟲柇銆備簬鏄紝渚挎湁浜嗕袱縐嶈繍琛屾湡澶氭併傝繖涓ょ澶氭佺殑鐗規у拰浠栦滑鐨勫樊寮傦紝鏄湰鏂囩殑鏍稿績銆傚疄闄呬笂錛岀浉姣斿姩澶氭侊紝 runtime unbound澶氭佷負鎴戜滑鎻愪緵浜嗘洿鏈川鐨勮繍琛屾椂澶氭佹墜孌碉紝鎴戜滑鍙互浠庝腑鑾峰緱鏇村ぇ鐨勬敹鐩娿備絾鏄壌浜庝竴浜涙妧鏈笂鐨勫洶闅撅紝runtime unbound澶氭佹棤娉曡繘鍏ヤ富嫻佷笘鐣屻備笉榪囷紝鐢變簬鏂扮殑緙栫▼鎶鏈殑鍑虹幇錛屼嬌寰楄繖縐嶆洿濂界殑榪愯鏃跺鎬佸艦寮忓彲浠ュ悓鍔ㄥ鎬佷竴姣旈珮涓嬨?br> <h2>鍔ㄥ鎬?nbsp;   <br></h2>     搴熻瘽灝戣錛岃鎴戜滑浠庝竴涓佹帀鐗欑殑妗堜緥寮濮嬪惂錛氱紪鍐欎竴涓粯鍥劇▼搴忥紝鍥懼艦鍖呮嫭鐭╁艦銆佹き鍦嗐佷笁瑙掑艦銆佸杈瑰艦絳夌瓑銆傚浘褰粠鑴氭湰錛堟瘮濡倄ml錛変腑璇誨嚭錛屽垱寤哄悗淇濆瓨鍦ㄤ竴涓鍣ㄤ腑澶囨煡銆傞氳繃閬嶅巻瀹瑰櫒鎵ц鍥懼艦緇樺埗銆?br>    灝辮繖涔堜釜棰樼洰錛屽緢綆鍗曪紝涔熷緢鐔熸倝錛岃В閲奜OP鐨勫姩澶氭佹渶甯哥敤鐨勬渚嬨備笅闈㈡垜浠氨浠庡姩澶氭佸疄鐜板紑濮嬨?br>    棣栧厛瀹氫箟涓涓娊璞″熀綾伙紝涔熷氨鏄帴鍙o細<br> <p>    class IShape</p> <p>    {</p> <p>        virtual void load(xml init)=0;</p> <p>        virtual void draw(monitor m)=0;</p> <p>        ...<br></p> <p>    };</p> <p>    鐒跺悗瀹氫箟鍚勭鍥懼艦綾伙紝騫朵粠榪欎釜鎺ュ彛涓婄戶鎵匡細</p> <p>    class Rectangle: public IShape<br></p> <p>    {</p> <p>        void load(xml init) {...}</p> <p>        void draw(monitor m) {...}</p> <p>        ...<br></p> <p>    };</p> <p>    class Ellipse: public IShape</p> <p>    {</p> <p>        void load(xml init) {...}</p> <p>        void draw(monitor m) {...}</p> <p>        ...</p> <p>    };</p> <p>    ...</p> <p> </p> <p>    void DrawShapes(monitor m, vector<IShape*> const& g)</p> <p>    {</p> <p>        vector<IShape*>::const_iterator b(g.begin()), e(g.end());<br> </p> <p>        for(; b!=e; ++b)</p> <p>        {</p> <p>            (*b)->draw(m);<br> </p> <p>        }<br> </p> <p>    }<br> </p> <p>    ...<br></p> <p>    鐜板湪鍙互浣跨敤榪欎簺鍥懼艦綾諱簡錛?/p> <p>    vector<IShape*> vg;</p> <p>    vg.push_back(new Rectangle);</p> <p>    vg.push_back(new Ellipse);</p> <p>    ...</p> <p>    DrawShapes(crt, vg);<br></p> <p>    閫氳繃鎺ュ彛IShape錛屾垜浠彲浠ユ妸涓嶅悓鐨勫浘褰㈢被緇熶竴鍒頒竴縐嶇被鍨嬩笅銆備絾鏄紝閫氳繃铏氬嚱鏁扮殑override錛岀敱鍥懼艦綾誨疄鐜癐Shape涓婄殑铏氬嚱鏁般傝繖鍙互綆楄? 鐢熷父璋堜簡銆傚姩澶氭佺殑鏍稿績灝辨槸鍒╃敤override鍜宭ate bound鐨勭粍鍚堬紝浣垮緱涓涓熀綾誨彲浠ュ湪綾誨瀷褰掍竴鍖栫殑鎯呭喌涓嬶紝鎷ユ湁緇ф壙綾葷殑璇箟銆侽OP璁捐妯″紡澶ч噺榪愮敤榪欑鎶鏈紝瀹炵幇寰堝闇瑕佺伒媧繪墿灞曠殑緋葷粺銆?/p> <h2>Runtime Unbound</h2>     Runtime Unbound澶氭佹販鍚堜簡闈欏鎬佸拰鍔ㄥ鎬佺殑鐗瑰緛錛屽嵆鏃㈡湁綾誨瀷娉涘寲錛屽張鏄繍琛屾椂鍐蟲柇鐨勩備竴涓渶鍏稿瀷鐨勪緥瀛愬氨鏄痳uby鐨勫嚱鏁幫細<br>    class x<br>       <strong>def fun(car)</strong><br style="font-weight: bold;"><strong>            car.aboard</strong><br style="font-weight: bold;"><strong>        end</strong><br>    end<br>    榪欎釜妗堜緥闈炲父鏄庣‘鍦板睍紺哄嚭浜哛untime Unbound澶氭佺殑鐗圭偣銆俢ar鍙傛暟娌℃湁綾誨瀷錛岃繖閲屼篃涓嶉渶瑕佸叧蹇冪被鍨嬶紝鍙姹俢ar瀵硅薄鏈変竴涓猘board鏂規硶鍗沖彲銆傜敱浜巖uby鏄姩鎬佽璦錛岃兘澶熻繍琛屾椂媯嫻嬪璞$殑鐗瑰緛錛屽茍鍔ㄦ佽皟鐢ㄥ璞′笂鐨勬柟娉曘?br>    鍦≧untime Unbound鐨勬濇兂鎸囧涓嬶紝鎴戜滑鍒╃敤涓縐嶄吉閫犵殑“鍔ㄦ丆++”錛屾妸涓婇潰鐨勭粯鍥句緥瀛愰噸鏂扮紪鍐欙細<br> <p>    class Rectangle<br> </p> <p>    {</p> <p>        void load(xml init) {...}</p> <p>        void draw(monitor dev) {...}</p> <p>        ...<br> </p> <p>    };</p> <p>    class Ellipse</p> <p>    {</p> <p>        void load(xml init) {...}</p> <p>        void draw(monitor dev) {...}</p> <p>        ...</p> <p>    };</p> <p>    ...</p> <p>    void DrawShapes(monitor dev, vector<<strong>anything</strong>> const& g)</p> <p>    {</p> <p>        vector<IShape>::const_iterator b(g.begin()), e(g.end());<br> </p> <p>        for(; b!=e; ++b)</p> <p>        {</p> <p>            (*b).draw(dev);<br> </p> <p>        }<br> </p> <p>    }</p> <p>    ...<br></p> <p>    vector<<strong>anything</strong>> vg;</p> <p>    vg.push_back(Rectangle(...));</p> <p>    vg.push_back(Ellipse(...));</p> <p>    ...</p> <p>    DrawShapes(crt, vg);<br></p>     鍥懼艦綾諱笉鍐嶄粠鎶借薄鎺ュ彛IShape緇ф壙錛岃岀敤鍏抽敭瀛梐nything瀹炰緥鍖杤ector<>妯℃澘銆傝繖涓櫄鏋勭殑anything鍏抽敭瀛楁墍璧風殑浣? 鐢ㄥ氨鏄嬌寰梫ector鑳藉鎺ュ彈涓嶅悓綾誨瀷鐨勫璞°傚綋DrawShapes()鍑芥暟鎺ユ敹鍒板瓨鏀懼浘褰㈠璞$殑瀹瑰櫒鍚庯紝閬嶅巻姣忎竴涓璞★紝騫朵笖璋冪敤瀵硅薄涓婄殑draw ()鍑芥暟錛岃屼笉綆″叾綾誨瀷銆?br>    浠庤繖孌典唬鐮佷腑錛屾垜浠彲浠ョ湅鍑篟untime Unbound澶氭佸甫鏉ョ殑濂藉銆傛墍鏈夊浘褰㈢被涓嶅啀闇瑕佸綊涓鍖栨垚涓涓被鍨嬶紙鎶借薄鎺ュ彛錛夈傛瘡涓被鍙渶鎸夌収綰﹀畾錛屽疄鐜發oad銆乨raw絳夋垚鍛樺嚱鏁板嵆鍙備篃灝辨槸 璇達紝榪欎簺鍥懼艦綾昏В鑰﹀悎浜嗐備竴鏃︾被鍨嬭В鑰︼紝渚胯祴浜堟垜浠緢澶х殑鑷敱搴︺傛渶鍏稿瀷鐨勬儏鍐靛氨鏄紝鎴戜滑闇瑕佷嬌鐢ㄤ竴涓叾浠栦漢寮鍙戠殑鍥懼艦綾伙紝騫朵笖鏃犳硶淇敼鍏跺疄鐜般傛鏃訛紝濡? 鏋滀嬌鐢ㄥ姩澶氭侊紝灝卞緢楹葷儲銆傚洜涓哄敖綆¤繖浜涘浘褰㈢被閮芥嫢鏈塴oad銆乨raw絳夊嚱鏁幫紝浣嗘瘯绔熶笉鏄戶鎵胯嚜IShape錛屾棤娉曠洿鎺ユ彃鍏ュ鍣ㄣ傚繀欏葷紪鍐欎竴涓戶鎵胯嚜 IShape鐨勯傞厤鍣紝浣滀負澶栨潵鍥懼艦綾葷殑鍖呰錛岃漿鍙戝鍏剁殑璁塊棶銆傝〃闈笂錛屾垜浠彧鏄噺灝戜竴涓帴鍙g殑瀹氫箟錛屼絾Runtime Unbound澶氭佸甫鏉ョ殑瑙h︽湁鐫闈炲嚒鐨勬剰涔夈傚洜涓虹被鑰﹀悎濮嬬粓鏄疧OP璁捐涓殑涓涓護浜哄ご鐥涚殑闂銆傚湪鍚庨潰錛屾垜浠繕灝嗙湅鍒板緩绔嬪湪Runtime Unbound澶氭佸熀紜涓婄殑鏇村ぇ鐨勮繘姝ャ?br>    鐒惰岋紝灝界Runtime Unbound澶氭佸叿鏈夎繖浜涗紭鐐癸紝浣嗗洜涓哄緩绔嬪湪鍔ㄦ佽璦涔嬩笂錛屽叾鑷韓瀛樺湪鐨勪竴浜涚己闄蜂嬌寰楄繖欏規妧鏈棤娉曞箍娉涗嬌鐢紝騫惰繘鍏ヤ富嫻併?br>    Runtime Unbound澶氭侀潰涓寸殑絎竴涓棶棰樺氨鏄被鍨嬪畨鍏ㄣ傜‘鍒囩殑璁叉槸闈欐佺被鍨嬪畨鍏ㄣ?br>    鏈川涓婏紝Runtime Unbound澶氭侊紙鍔ㄦ佽璦錛夊茍闈炴病鏈夌被鍨嬪畨鍏ㄣ傚綋鍔ㄦ佽璦璇曞浘璁塊棶涓涓湭鐭ョ被鍨嬪璞$殑鎴愬憳鏃訛紝浼氶氳繃涓浜涚壒孌婃満鍒舵垨鐗規畩鎺ュ彛鑾峰緱綾誨瀷淇℃伅錛屽茍鍦ㄥ叾涓 鎵炬墍闇鐨勫璞℃垚鍛樸傚鏋滄病鏈夋壘鍒幫紝渚夸細鎶涘嚭寮傚父銆備絾鏄紝浼犵粺涓婏紝鎴戜滑甯屾湜璇█鑳藉鍦ㄧ紪璇戞湡寰楀埌綾誨瀷瀹夊叏淇濊瘉錛岃屼笉瑕佸湪榪愯鏃舵墠鍙戠幇闂銆備篃灝辨槸璇達紝 Runtime Unbound澶氭佸彧鑳芥彁渚涜繍琛屾椂綾誨瀷瀹夊叏錛岃屾棤娉曞緱鍒伴潤鎬佺被鍨嬪畨鍏ㄣ?br>    絎簩涓棶棰樻槸鎬ц兘銆俁untime Unbound闇瑕佸湪榪愯鏃舵悳瀵葷被鍨嬬殑鎺ュ彛錛屽茍鎵ц璋冪敤銆傛墽琛岃繖綾誨鎵懼拰璋冪敤鐨勬柟娉曟湁涓ょ錛氬弽灝勫拰鍔ㄦ侀摼鎺ャ?br>    鍙嶅皠鏈哄埗鍙互鍚戠▼搴忔彁渚涚被鍨嬬殑淇℃伅銆傞氳繃榪欎簺淇℃伅錛孯untime Unbound鍙互浜嗚В鏄惁瀛樺湪鎵闇鐨勬帴鍙e嚱鏁般傚弽灝勯氬父涔熸彁渚涗簡鎺ュ彛鍑芥暟璋冪敤鐨勬湇鍔★紝鍏佽灝嗗弬鏁版墦鍖咃紝騫墮氳繃鍑芥暟鍚嶈皟鐢ㄣ傝繖縐嶆満鍒舵ц兘寰堝樊錛屽熀鏈笂鏃犳硶鐢ㄤ簬紼嶈瀵嗛泦浜涚殑鎿嶄綔銆?br>    鍔ㄦ侀摼鎺ュ垯鏄湪璁塊棶瀵硅薄鍓嶅湪瀵硅薄鐨勬垚鍛樺嚱鏁拌〃涓婃煡璇㈠茍鑾峰緱鐩稿簲鍑芥暟鐨勫湴鍧錛屽~鍏呭埌璋冪敤鏂圭殑璋冪敤琛ㄤ腑錛岃皟鐢ㄦ柟閫氳繃璋冪敤琛ㄦ墽琛岄棿鎺ヨ皟鐢ㄣ傝繖縐嶆満鍒剁浉瀵瑰揩涓浜涳紝浣嗙敱浜庨渶瑕佹煡璇㈡垚鍛樺嚱鏁拌〃錛屽鏉傚害鍩烘湰涓婇兘鍦∣(n)宸﹀彸錛屾棤娉曚笌鍔ㄥ鎬佺殑O(1)璋冪敤鐩告瘮銆?br>    榪欎簺闂鐨勮В鍐籌紝渚濊禆浜庝竴縐嶆柊鍏寸殑鎶鏈紝鍗砪oncept銆俢oncept涓嶄粎寰堟秷闄や簡綾誨瀷瀹夊叏鐨勯棶棰橈紝鏇翠富瑕佺殑鏄畠澶у箙緙╁皬浜嗕袱縐峈untime澶氭佺殑鎬ц兘宸窛錛屾湁鏈涗嬌Runtime Unbound鎴愪負涓繪祦鐨勬妧鏈?br> <h2>concept</h2>     闅忕潃C++0x閫愭笎嫻嚭姘撮潰錛宑oncept浣滀負姝ゆ鏍囧噯鏇存柊鐨勬牳蹇冮儴鍒嗭紝宸茬粡鍦–++紺劇兢涓紩璧峰叧娉ㄣ傞殢鐫鏃墮棿鐨勬帹縐伙紝concept鐨勬綔鍦ㄤ綔鐢ㄤ篃鍦ㄤ笉鏂鍙戞帢鍑烘潵銆?br>    concept涓昏鐢ㄦ潵鎻忚堪涓涓被鍨嬬殑鎺ュ彛鍜岀壒寰併傞氫織鍦拌錛宑oncept鎻忚堪浜嗕竴緇勫叿澶囦簡鍏卞悓鎺ュ彛鐨勭被鍨嬨傚湪寮曞叆concept鍚庯紝C++鍙互瀵規ā鏉垮弬鏁拌繘琛岀害鏉燂細<br>    concept assignable<T> {<br>        T& operator=(T const&);<br>    }<br>    template<assignable T> void copy(T& a, T const& b) {<br>        a=b;<br>    }<br>    榪欒〃紺虹被鍨婽蹇呴』鏈塷perator=鐨勯噸杞姐傚鏋滀竴涓被鍨媂娌℃湁瀵筼perator=榪涜閲嶈澆錛岄偅涔堝綋璋冪敤copy鏃訛紝渚夸細寮曞彂緙栬瘧閿欒銆傝繖浣垮緱綾誨瀷鍙傛暟鍙互鍦ㄥ嚱鏁頒嬌鐢ㄤ箣鍓嶄究鑳藉緱鍒版楠岋紝鑰屾棤闇絳夊埌瀵硅薄琚嬌鐢ㄦ椂銆?br>    鍙︿竴鏂歸潰錛宑oncept鍙備笌鍒扮壒鍖栦腑鍚庯紝浣垮緱鎿嶄綔鍒嗘淳鏇村姞鏂逛究錛?br>    concept assignable<T> {<br>        T& operator=(T const&);<br>    }<br>    concept copyable<T> {<br>        T& T::copy(T const&);<br>    }<br>    template<assignable T> void copy(T& a, T const& b) {    //#1<br>         a=b;<br>     }<br>     template<copyable T> void copy(T& a, T const& b) {    //#2<br>        a.copy(b);<br>    }<br>    X x1,x2; //X鏀寔operator=鎿嶄綔絎?br>    Y y1,y2; //Y鎷ユ湁copy鎴愬憳鍑芥暟<br>    copy(x1, x2);    //浣跨敤#1<br>    copy(y1, y2);    //浣跨敤#2<br>    鍦ㄩ潤澶氭佷腑錛宑oncept寰堝ソ鍦版彁渚涗簡綾誨瀷綰︽潫銆傛棦鐒跺悓鏍鋒槸Unbound錛岄偅涔坈oncept鏄惁鍚屾牱鍙互琚敤浜嶳untime Unbound錛熷簲褰撹鍙互錛屼絾涓嶆槸鐜版湁鐨刢oncept銆傚湪Runtime Unbound澶氭佷腑錛岄渶瑕佽繍琛屾椂鐨刢oncept銆?br>     渚濇棫浣跨敤緇樺浘妗堜緥鍋氫竴涓紨紺恒傚亣璁捐繖閲屼嬌鐢ㄧ殑"C++"宸茬粡鏀寔concept錛屽茍涓斾篃鏀寔浜嗚繍琛屾椂鐨刢oncept錛?br> <p>    class Rectangle<br> </p> <p>    {</p> <p>        void load(xml init) {...}</p> <p>        void draw(monitor dev) {...}</p> <p>        ...<br> </p> <p>    };</p> <p>    class Ellipse</p> <p>    {</p> <p>        void load(xml init) {...}</p> <p>        void draw(monitor dev) {...}</p> <p>        ...</p> <p>    };</p> <p>    ...</p> <p>    concept Shape<T> {</p> <p>        void T::load(xml init);</p> <p>        void T::draw(monitor dev);<br></p> <p>    }</p> <p>    ...<br></p> <p>    void DrawShapes(monitor dev, vector<<strong>Shape</strong>> const& g)</p> <p>    {</p> <p>        vector<IShape>::const_iterator b(g.begin()), e(g.end());<br> </p> <p>        for(; b!=e; ++b)</p> <p>        {</p> <p>            <strong>(*b).draw(dev);</strong><br> </p> <p>        }<br> </p> <p>    }</p> <p>    ...<br> </p> <p>    vector<<strong>Shape</strong>> vg;</p> <p>    vg.push_back(Rectangle(...));</p> <p>    vg.push_back(Ellipse(...));</p> <p>    vg.push_back(string("xxx"));    //閿欒錛屼笉絎﹀悎Shape concept<br></p> <p>    ...</p> <p>    DrawShapes(crt, vg);</p> <p>    涔嶇湅璧鋒潵娌′粈涔堢壒鍒殑錛屼絾鏄娉ㄦ剰vector<Shape>銆傝繖閲?span style="font-weight: bold;">浣跨敤涓涓猚oncept錛岃屼笉鏄竴涓叿浣撶殑綾誨瀷錛屽疄渚嬪寲涓涓ā鏉?/span>銆傝繖閲岀殑鎰忔濇槸璇達紝榪欎釜瀹瑰櫒鎺ュ彈鐨勬槸鎵鏈夌鍚圫hape concept鐨勫璞★紝綾誨瀷涓嶅悓涔熸病鍏崇郴銆傚綋push榪泇g鐨勫璞′笉絎﹀悎Shape錛屼究浼氬彂鐢熺紪璇戦敊璇?/p> <p>     浣嗘槸錛屾渶鍏抽敭鐨勪笢瑗夸笉鍦ㄨ繖閲屻傛敞鎰忓埌DrawShapes鍑芥暟浜嗗悧錛熺敱浜巚ector<Shape>涓殑鍏冪礌綾誨瀷鍙兘瀹屽叏涓嶅悓銆傝鍙? (*b).draw(dev);鐨勮涔夊湪闈欐佽璦涓槸闈炴硶鐨勶紝鍥犱負鎴戜滑鏍規湰鏃犳硶鍦ㄧ紪璇戞椂鍏蜂綋紜畾(*b)鐨勭被鍨嬶紝浠庤岄摼鎺ユ紜殑draw鎴愬憳銆傝屽湪榪欓噷錛? 鐢變簬鎴戜滑寮曞叆浜哛untime Unbound錛屽浜庡璞$殑璁塊棶閾炬帴鍙戠敓鍦ㄨ繍琛屾椂銆傚洜姝わ紝鎴戜滑渚垮彲浠ユ妸涓嶅悓綾誨瀷鐨勫璞″瓨鏀懼湪涓涓鍣ㄤ腑銆?/p> <p>    concept鍦ㄨ繖閲岃搗鍒頒簡綾誨瀷媯楠岀殑浣滅敤錛屼笉絎﹀悎鐩稿簲concept鐨勫璞℃槸鏃犳硶鏀懼叆榪欎釜瀹瑰櫒鐨勶紝浠庤屽湪姝ゅ悗瀵瑰璞$殑浣跨敤鐨勬椂鍊欙紝涔熶笉浼氬彂鐢熺被鍨嬪け閰嶇殑 闂銆傝繖涔熷氨鍦ㄥ姩鎬佺殑鏈哄埗涓嬬‘淇濅簡綾誨瀷瀹夊叏銆傚姩澶氭佺‘淇濈被鍨嬪畨鍏ㄤ緷闈犻潤鎬佺被鍨嬨備篃灝辨槸鎵鏈夌被鍨嬮兘浠庝竴涓娊璞℃帴鍙d笂緇ф壙錛屼粠鑰屽皢綾誨瀷褰掍竴鍖栵紝浠ヨ幏寰楀緩绔嬪湪闈? 鎬佺被鍨嬬郴緇熶箣涓婄殑綾誨瀷瀹夊叏銆傝宑oncept鐨勭被鍨嬪畨鍏ㄤ繚璇佹潵婧愪簬瀵圭被鍨嬬壒寰佺殑鎻忚堪錛屾槸涓縐嶉潪渚靛叆鐨勬帴鍙g害鏉燂紝鐏墊椿鎬уぇ澶ч珮浜庣被鍨嬪綊涓鍖栫殑鍔ㄥ鎬併?br></p> <p>    濡傛灉鎴戜滑寮曞叆榪欐牱涓涓鍒欙細濡傛灉鐢ㄧ被鍨嬪垱寤哄疄渚嬶紙瀵硅薄錛夛紝閭d箞鎵鍒涘緩鐨勫璞℃槸闈欐侀摼鎺ョ殑錛屼篃灝辨槸緙栬瘧鏃墮摼鎺ワ紱鑰岀敤concept鍒涘緩涓涓璞★紝閭d箞鎵鍒涘緩鐨勫璞℃槸鍔ㄦ侀摼鎺ョ殑錛屼篃灝辨槸榪愯鏃墮摼鎺ャ?/p> <p>    鍦ㄨ繖鏉¤鍒欑殑浣滅敤涓嬶紝涓嬮潰榪欐綆鍗曠殑浠g爜灝嗕細浜х敓闈炲父濂囧鐨勬晥鏋滐細</p> <p>    class nShape</p> <p>    {</p> <p>    public:<br></p> <p>        nShape(<strong>Shape g</strong>, int n) : <strong>m_graph(g)</strong>, m_n(n) {}<br></p> <p>        void setShape(<strong>Shape g</strong>) {</p> <p>            <strong>m_graph=g;</strong><br></p> <p>        }<br></p> <p>    private:</p> <p>        <strong>Shape    m_graph;</strong></p> <p>        int        m_n;<br></p> <p>    };</p> <p>    鍦ㄨ鍒欑殑浣滅敤涓嬶紝m_graph鏄竴涓?strong>鍔ㄦ佸璞?/strong>錛屽畠鐨勭被鍨嬪彧鏈夊湪榪愯鏃舵墠鑳芥槑紜備絾鏄棤璁轟粈涔堢被鍨嬶紝蹇呴』婊¤凍Shape concept銆傝宮_n鐨勭被鍨嬫槸紜畾鐨勶紝鎵浠ユ槸涓涓?strong>闈欐佸璞?/strong>銆?/p> <p>    榪欏拰浼犵粺鐨勬ā鏉挎湁鍖哄埆鍚楋紵妯℃澘涔熷彲浠ョ敤涓嶅悓鐨勭被鍨嬪弬鏁板畾涔夋垚鍛樻暟鎹傝鐪嬪涓嬩唬鐮侊細</p> <p>    Rectangle r;</p> <p>    Ellipse e;<br><strong>     nShape(r, 10);</strong></p> <p><strong>     nShape.setShape(e);   </strong>//瀵逛簬浼犵粺妯℃澘鑰岃█錛岃繖涓搷浣滄槸闈炴硶鐨勶紝鍥犱負e鍜宺涓嶆槸鍚屼竴縐嶇被鍨?/p> <p>    鍔ㄦ佸璞$殑鐗圭偣鍦ㄤ簬錛屾垜浠彲浠ュ湪瀵硅薄鍒涘緩鍚庯紝鐢ㄤ竴涓笉鍚岀被鍨嬬殑鍔ㄦ佸璞′唬鏇垮師鏉ョ殑錛屽彧闇瑕佽繖浜涘璞$鍚堢浉搴旂殑concept銆傝繖鍦ㄩ潤鎬佺殑妯℃澘涓婃槸鍋氫笉鍒扮殑銆?br></p>     鐜板湪鍥炶繃澶存潵鐪嬩竴涓嬬敤concept瀹炰緥鍖栨ā鏉跨殑鎯呭艦銆傛垜浠煡閬擄紝鐢ㄤ竴涓被鍨嬪疄渚嬪寲涓涓ā鏉匡紝寰楀埌鐨勬槸涓涓被錛屾垨鑰呰綾誨瀷銆傝岀敤涓涓猚oncept瀹炰緥鍖? 涓涓ā鏉匡紝寰楀埌鐨勫張鏄粈涔堝憿錛熻繕鏄竴涓猚oncept銆傞偅涔坴ector<Shape>鏄竴涓猚oncept錛屽洜鑰屽畠鐨勫疄渚嬫槸鍔ㄦ佺殑瀵硅薄銆傚綋 鐒訛紝瀹為檯涓婃病鏈夊繀瑕佹妸vector<Shape>鐨勫疄渚嬫暣涓湴褰撴垚鍔ㄦ佸璞★紝瀹冨彧鏄叿鏈夊姩鎬佸璞$殑琛屼負鐗瑰緛銆傚湪瀹炵幇涓婏紝vector< Shape>鍙互鎸夌収鏅氭ā鏉垮睍寮錛岃屽叾鍐呴儴鐢眂oncept妯℃澘瀹炲弬瀹氫箟鐨勫璞′綔涓哄姩鎬佸璞″鐞嗗嵆鍙?strong>涓涓敱concept瀹炰緥鍖栫殑妯℃澘鐨勫璞′綔涓鴻涔変笂鐨勫姩鎬佸璞?/strong>銆?br>    涓嬮潰鐨勪唬鐮佸垯寮曞嚭浜嗗彟涓涓噸瑕佺殑鐗規э細<br>    vector<<strong>float</strong>> vFloat;    //闈欐佸璞$殑瀹瑰櫒錛屽唴閮ㄥ瓨鏀劇殑閮芥槸闈欐佸璞★紝灞炰簬鍚屼竴綾誨瀷float<br>    vector<<strong>Shape</strong>> vShape; //鍔ㄦ佸璞$殑瀹瑰櫒錛屽唴閮ㄥ瓨鏀懼姩鎬佸璞★紝閮界鍚圫hape<br>    鍚屼竴涓被妯℃澘錛屽綋<span style="font-weight: bold;">浣跨敤綾誨瀷瀹炰緥鍖栵紝鎵цstatic unbound澶氭?/span>錛?span style="font-weight: bold;">浣跨敤concept瀹炰緥鍖栵紝鎵цruntime unbound澶氭?/span>銆備袱鑰呯殑褰㈠紡鐩稿悓銆備篃灝辨槸璇?strong>static澶氭佸悓runtime澶氭佷互鐩稿悓鐨勫艦寮忚〃杈?/strong>銆? 鐢變簬concept鐨勫姞鍏ワ紝涓ょ瀹屽叏涓嶅悓鐨勫鎬佽緇熶竴鍦ㄥ悓涓涓ā鍨嬪拰褰㈠紡涓嬨傚疄闄呬笂錛宻tatic鍜宺untime unbound澶氭佸彲浠ョ湅浣滃悓涓涓娊璞′綋緋葷殑涓や釜鍒嗘敮錛屽垎鍒鐞嗕笉鍚屾儏鍐電殑搴旂敤銆傝屽艦寮忎笂鐨勭粺涓錛屽垯鏇村姞鎺ヨ繎鎶借薄浣撶郴鐨勬湰璐ㄣ傚悓鏃訛紝涔熶嬌寰椾袱縐? unbound澶氭佺殑宸紓琚悗鍙板寲錛屼嬌鐢ㄨ呮棤闇棰濆鐨勫伐浣滐紝渚垮彲浠ュ悓鏃惰幏寰楀姩鎬佸拰闈欐佺殑鎶借薄鑳藉姏銆傚悓鏃訛紝涓ょ澶氭佹墍灞曠ず鐨勯昏緫涓婄殑瀵圭О鎬э紝涔熸殫紺轟簡涓よ呭湪 鏈川涓婄殑鑱旂郴銆傝繖閲岀粺涓鐨勫艦寮忥紝渚挎槸榪欑瀵圭О鎬х殑緇撴灉銆?br>    瀵逛簬妯℃澘鍑芥暟錛屽垯浼氳〃鐜板嚭鏇村姞鏈夎叮鐨勭壒鎬э紙榪欎釜鍑芥暟妯℃澘鏈変簺鐗瑰埆錛屼笉闇瑕乼emplate鍏抽敭瀛楀拰綾誨瀷鍙傛暟鍒楄〃錛岃繖鏄垜浼犵殑銆備絾鐢變簬concept鐨勪嬌鐢紝瀹冩湰璐ㄤ笂榪樻槸涓涓ā鏉匡級錛?br>    void draw(<strong>Shape</strong> g);<br>    榪欎釜鍑芥暟鎺ュ彈涓涓鍚圫hape鐨勫弬鏁般傚鏋滄垜浠敤涓涓潤鎬佸璞¤皟鐢ㄨ繖涓嚱鏁幫細<br>    Rectangle r;<br>    draw(r);<br>    閭d箞錛屽氨鎵цstatic unbound錛屽疄渚嬪寲鎴愪竴涓畬瀹屾暣鏁寸殑鍑芥暟錛屽悓浼犵粺鐨勫嚱鏁版ā鏉夸竴鏍楓?br>    濡傛灉鐢ㄤ竴涓姩鎬佸璞¤皟鐢ㄨ繖涓嚱鏁幫細<br>    <strong>Shape g=Cycle();</strong><br>    draw(<strong>g</strong>);<br>    <strong>g=Rectangle();</strong><br>     draw(<strong>g</strong>);<br>    閭d箞錛屽氨鎵цruntime unbound錛岀敓鎴愪竴涓瓑寰呰繍琛屾椂閾炬帴鐨勫嚱鏁般備笂闈㈢殑涓ゆ璋冪敤錛屽垎鍒繘琛屼簡涓ゆ榪愯鏃墮摼鎺ワ紝浠ュ尮閰嶄笉鍚岀殑鍔ㄦ佸璞°?br>    榪欐牱錛屾垜浠彲浠ラ氳繃鍑芥暟璋冪敤鏃剁殑鍙傛暟瀵硅薄錛屾潵鎺у埗浣跨敤涓嶅悓鐨勫鎬佸艦寮忋傛洿澶嶆潅鐨勬儏鍐靛氨鏄敤涓涓嚱鏁扮殑榪斿洖鍊艱皟鐢ㄥ彟涓涓嚱鏁幫紝榪欐牱鏋勬垚鐨勮皟鐢ㄩ摼渚濈劧絎﹀悎涓婅堪鐨勮皟鐢ㄦ帶鍒跺師鍒欍?br>    涓嬮潰錛屾垜浠皢鐪嬪埌Runtime Unbound澶氭佺殑涓涓簿褰╄〃婕旓細<br>    //鍋囪錛屾垜浠凡緇忓畾涔変簡Rectangle銆丆ycle銆丼quare銆丒llipse銆乀rangle浜斾釜綾伙紝<br>    // 鍒嗗埆map鍒癛ectangles銆丆ycles銆丼quares銆丒llipses銆乀rangles浜斾釜concept涓婏紝<br>    // 榪欎簺concept閮絩efine錛堝彲浠ヤ笉姝g‘鍦扮悊瑙d負緇ф壙鍚э級鑷猄hape銆?br>    void draw(monitor dev, <strong>Rectangles</strong> r); //#3<br>    void draw(monitor dev, <strong>Cycles</strong> c);       //#4<br>    void draw(monitor dev, <strong>Squares</strong> s);    //#5<br>    void draw(monitor dev, <strong>Ellipses</strong> e);    //#6<br>    void draw(monitor dev, <strong>Trangles</strong> t);    //#7<br>    //姝ゅ瀹氫箟涓涓猄hape鐨勫姩鎬佸璞?br>    <strong>Shape</strong> g=<strong>CreateShapeByUserInput</strong>();    //榪欎釜鍑芥暟鏍規嵁鐢ㄦ埛杈撳叆鍒涘緩鍥懼艦瀵硅薄錛屾墍浠ュ浘褰㈠璞$殑綾誨瀷鍙兘鍒拌繍琛屾椂浠庤兘紜畾銆?br>    draw(crt, g);<br>    濂戒簡錛岀幇鍦ㄨ璋冪敤鍝釜鐗堟湰鐨刣raw錛熸牴鎹敤鎴風殑杈撳叆鏉ャ傛崲鍙ヨ瘽璇達紝璋冪敤鍝釜鐗堟湰鐨刣raw錛屽彇鍐充簬<strong>CreateShapeByUserInput</strong>()鍑芥暟鐨勮繑鍥炵粨鏋滐紝涔熷氨鏄敤鎴瘋緭鍏ョ殑緇撴灉銆傚鏋?strong>CreateShapeByUserInput</strong>() 榪斿洖Rectangle鐨勫姩鎬佸璞★紝閭d箞鎵ц#3錛涘鏋滆繑鍥炵殑鏄疶rangle瀵硅薄錛岄偅涔堟墽琛?7銆傝繖鏄竴縐嶅姩鎬佸垎媧劇殑鎿嶄綔銆傚湪榪愯鏃禼oncept鐨勪綔 鐢ㄤ笅錛屽疄鐜拌搗鏉ラ潪甯稿鏄撱傚draw鐨勮皟鐢ㄦ渶緇堜細琚漿鎹㈡垚涓涓猚oncept闇姹傝〃錛屾潵鑷猟raw鍑芥暟錛屾瘡涓欏瑰搴斾竴涓嚱鏁扮増鏈紝騫朵笖鎸囨槑浜嗘墍瀵瑰簲鐨? concept銆傚姩鎬佸璞′笂涔熸湁涓涓猚oncept琛紝姣忎竴欏瑰瓨鏀句簡榪欎釜瀵硅薄鎵絎﹀悎鐨刢oncept銆傜敤榪欎袱涓〃鐩鎬簰鍖歸厤錛屽彲浠ユ壘鍒癵瀵硅薄鐨? concept鏈鍖歸厤鐨勯偅涓猟raw鐗堟湰錛岀劧鍚庤皟鐢ㄣ?br>    榪欏疄闄呬笂鏄皢閲嶈澆鍐蟲柇鏀懼埌榪愯鏃惰繘琛岋紝鑰宑oncept鍦ㄥ叾涓搗鍒頒簡鍖歸厤鍙傛暟鐨勪綔鐢ㄣ?br>    榪欐牱鐨勫仛娉曞悓鍒╃敤rtti淇℃伅鎵ц綾誨瀷鍒嗘淳璋冪敤綾諱技錛?br>    void draw_impl(monitor dev, Rectangle& r);<br>     void draw_impl(monitor dev, Cycle& c);<br>     void draw_impl(monitor dev, Square& s);<br>     void draw_impl(monitor dev, Ellipse& e);<br>     void draw_impl(monitor dev, Trangle& t);<br>    void draw_impl(monitor dev, Shape& g) {<br>        if(typeif(g)==typeid(Rectangle))<br>            draw_impl(dev, (Rectangle&)g);<br>        else if(typeif(g)==typeid(Cycle))<br>            draw_impl(dev, (Cycle&)g);<br>        ...<br>    }<br>    浣嗘槸錛屼粬浠嵈鏈夌潃澶╁¥涔嬪埆銆傞鍏堬紝rtti鍒嗘淳鏄鏡鍏ョ殑銆傚鏋滈渶瑕佸鍔犱竴涓浘褰紝闇瑕佸湪draw鍑芥暟涓鍔犲垎媧句唬鐮併傝孯untime Unbound鏂規鍒欏彧闇瑕佺敤鏂扮殑concept閲嶈澆draw鍑芥暟鍗沖彲銆?br>    鍏舵錛宺tti鐗堟湰鏈夊灝戝浘褰㈢被錛屽氨闇瑕佸灝慽f...else...錛岃孯untime Unbound鍒欐槸涓瀵瑰鐨勩傚鏋滄湁鍑犱釜鍥懼艦綾誨唴瀹逛笉鍚岋紝浣嗘湁鐩稿悓鐨勬帴鍙o紝絎﹀悎鍚屼竴涓猚oncept錛岄偅涔堝彧闇閽堝concept緙栧啓涓涓嚱鏁扮増鏈嵆鍙? 姣斿錛屽鏋滄湁涓涓壒鍒殑CycleEx綾伙紝浣跨敤澶栫晫姝f柟褰㈢殑宸︿笂瑙?鍙充笅瑙掑潗鏍囨弿榪幫紝姝eソ絎﹀悎Ellipses concept錛岄偅涔堝彧闇灝咰ycleEx map鍒癊llipses涓婂嵆鍙紝鏃犻渶澶氬姞浠諱綍浠g爜銆?br>    鏈鍚庯紝rtti闇瑕佽幏鍙栫被鍨嬩俊鎭紝鐒跺悗鍋氱嚎鎬ф瘮杈冿紝鎬ц兘鏃犳硶浼樺寲銆備絾Runtime Unbound閫氳繃concept琛ㄧ殑鐩鎬簰鍖歸厤錛屼粎鐗墊秹鏁板兼搷浣滐紝鏈夊緢澶х殑浼樺寲絀洪棿銆?br>    閭d箞榪欐牱涓縐嶈繍琛屾椂鍒嗘淳鏈変粈涔堝ソ澶勫憿錛熸垜浠湅鍒板浘褰㈢被涓婄殑draw鍑芥暟鎺ュ彈涓涓猰onitor綾誨瀷鍙傛暟錛屽畠浠h〃璁懼銆傚鏋滃摢涓澶╅渶瑕佸悜鍙︿竴縐嶈澶囷紝姣斿 printer錛岃緭鍑哄浘褰紝閭d箞灝遍渶瑕佸湪鍥懼艦綾諱笂澧炲姞鍙︿竴涓増鏈殑draw鍑芥暟銆傚鏋滅被鏄埆浜哄紑鍙戠殑錛岄偅涔堝氨澧炲姞娌熼氱殑璐熸媴銆傚鏋滅被鏄鏉ョ殑錛屾垜浠棤娉曚慨 鏀癸紝閭d箞鍙兘閫氳繃adapter涔嬬被鐨勭鎷欐墜孌靛鐞嗐備負浜嗚monitor涔嬬被鍚屽浘褰㈡湰韜病鏈夊叧鑱旂殑涓滆タ鍒嗙錛屽簲褰撲嬌鐢ㄨ嚜鐢卞嚱鏁版墽琛宒raw鎿嶄綔銆備絾鏅? 鍑芥暟鍙兘鎺ュ彈紜畾鐨勭被鍨嬮噸杞斤紝鑰屼紶緇熺殑鍑芥暟妯℃澘鍒欓檺浜庣紪璇戞湡浣跨敤錛屾棤娉曡繘琛岃繍琛屾椂鍒嗘淳銆傛墍浠ワ紝濡傛灉鑳藉浣跨敤concept閲嶈澆鍑芥暟錛屽茍涓旇祴浜? Runtime Unbound鏈鴻兘錛岄偅涔堜究鍙互鐢ㄦ渶綆鍗曠殑褰㈠紡閽堝涓綾葷被鍨嬭繘琛屽鐞嗭紝鏁堣兘楂樺緱澶氥?br> <h2>榪愯鏃禼oncept<br></h2> <p>   璇█灞傞潰鐨刢oncept鏃犳硶鍋氬埌榪欎簺錛屽洜涓哄畠鏄紪璇戞湡鏈哄埗銆備負姝わ紝鎴戜滑闇瑕佹湁涓縐嶈繍琛屾椂鐨刢oncept錛屾垨鑰呰浜岃繘鍒剁駭鍒殑concept銆?/p> <p>    涓涓猚oncept鍖呭惈浜嗕笌涓涓垨鑻ュ共涓被鍨嬫湁鍏崇殑涓緇勫嚱鏁幫紝鍖呮嫭鎴愬憳鍑芥暟鍜岃嚜鐢卞嚱鏁般備簬鏄紝鎴戜滑灝卞彲浠ョ敤涓涓被浼?#8220;铏氳〃”鐨勫嚱鏁版寚閽堣〃錛堟殏涓旂О涓? ctable鍚э級瀛樻斁concept鎸囧畾鐨勫嚱鏁版寚閽堛傝繖鏍風殑ctable渚濋檮鍦ㄥ姩鎬佸璞′笂錛屽氨鍍弙table涓鏍楓傛瘡涓璞¢兘浼氬尮閰嶅拰map鍒拌嫢騫蹭釜 concept銆傚洜姝わ紝姣忎釜鍔ㄦ佸璞′細鏈変竴涓猚oncept琛紝鍏朵腑瀛樻斁鐫鎸囧悜鍚刢table鐨勬寚閽堬紝浠ュ強鐩稿簲鐨刢oncept鍩烘湰淇℃伅銆?/p> <p>    褰撲竴涓?#8220;鐢ㄦ埛”錛堝嚱鏁版垨妯℃澘錛夐渶瑕佸湪榪愯鏃墮摼鎺ュ埌瀵硅薄涓婄殑鏃跺欙紝瀹冧細鎻愪氦涓涓猚oncept鐨勪唬鐮侊紙鍏ㄥ眬鍞竴錛夈傜郴緇熺敤榪欎釜浠g爜鍦ㄥ姩鎬佸璞$殑 concept琛ㄤ笂媯绱紝鑾峰緱鎸囧悜鎵闇concept鐨勬寚閽堬紝騫朵笖濉啓鍒?#8220;鐢ㄦ埛”緇欏嚭鐨勪竴涓?#8220;鎻掑叆鐐?#8221;錛堜竴涓寚閽堬級涓傞殢鍚?#8220;鐢ㄦ埛”渚垮彲浠ョ洿鎺ラ氳繃榪欎釜 “鎻掑叆鐐?#8221;闂存帴璋冪敤鎵闇鐨勫嚱鏁幫紝鎴愬憳鎴栬嚜鐢卞嚱鏁般?/p> <p>    鍦ㄨ繖閲岋紝concept鐨勫閥濡欎箣澶勫湪浜庯紝灝嗕竴鏃忓嚱鏁伴泦鍚堝湪涓璧鳳紝浣滀負涓涓暣浣擄紙鍗蟲帴鍙o級銆傞偅涔堬紝鍦ㄦ墽琛岃繍琛屾椂鍖歸厤鐨勬椂鍊欙紝涓嶅啀鏄竴涓嚱鏁頒竴涓嚱鏁板湴鏌ヨ錛? 鍙互涓嬈℃у湴鑾風煡榪欎簺鍑芥暟鏄惁瀛樺湪銆傝繖灝卞緢瀹規槗鍦拌閬夸簡綾誨瀷瀹夊叏淇濊瘉鎿嶄綔鐨勬崯鑰椼傚鏋滀嬌鐢╤ash鏌ヨ錛岄偅涔堝彲浠ュ湪O(1)瀹炵幇concept鍖歸厤銆傚彟 澶栵紝涓涓猚oncept鐨刪ash鍊煎彲浠ュ湪緙栬瘧鏃惰綆楀ソ錛岃繍琛屾椂閾炬帴鍙渶鎵цhash琛ㄦ绱紝榪瀐ash鍊艱綆椾篃鍙互鐪佸幓銆?/p> <p>    涓涓姩鎬佸璞″彲浠ョ洿鎺ョ敤鎸囧悜concept ctable鐨勬寚閽堣〃紺恒傚湪涓嶅悓concept涔嬮棿杞崲錛岀浉褰撲簬鏀瑰彉鎸囬拡鐨勬寚鍚戯紝榪欑鎿嶄綔闈炲父綾諱技OOP涓殑dynamic_cast銆?/p> <p>    瀵逛簬濡備笅鐨勫姩鎬佸璞″畾涔夛細</p> <p>    Shape g=Cycle();</p> <p>    浼氬垱寤轟竴涓狢ycle瀵硅薄錛屽湪瀵硅薄涓婃瀯寤鴻搗涓涓猚oncept琛紝琛ㄤ腑瀵瑰簲Cycle鎵鏈夌鍚堢殑concept銆傚茍涓斿緩绔嬩竴緇刢table錛屾瘡涓? ctable瀵瑰簲涓涓猚oncept銆傛瘡涓猚oncept琛ㄩ」鎸囧悜鐩稿簲鐨刢table銆傝岀鍙穏鍒欏疄闄呬笂鏄寚鍚戞墍寤虹珛瀵硅薄鐨凷hapes ctable鐨勬寚閽堛?/p> <p>    瀵逛簬鍑芥暟錛?/p> <p>    void draw(<strong>Shape</strong> g);</p> <p>    draw(g);<br></p> <p>    璋冪敤g鏃訛紝鐢變簬draw鐨勫弬鏁版槸Shape concept錛岃実姝f槸draw鎵闇鐨刢oncept錛屾墍浠ユ棤闇鍦ㄥ璞鐨刢oncept琛ㄤ笂鍖歸厤錛屽彲浠ョ洿鎺ヤ嬌鐢ㄨ繖涓猚table鎸囬拡銆傝繖灝辨槸璇達紝鍙 鎵鐢ㄥ姩鎬佸璞★紙g錛夌殑concept鍚屼嬌鐢ㄦ柟錛坉raw鍑芥暟錛夎兘澶熷尮閰嶏紝渚垮彲浠ョ洿鎺ヤ嬌鐢ㄦ寚鍚慶table鐨勬寚閽堥摼鎺ワ紙緙栬瘧鏃墮摼鎺ワ級錛屾棤闇鍦ㄨ繍琛屾椂閲嶆柊鍖? 閰嶃傚彧鏈夊彂鐢焎oncept杞崲鏃訛紝鎵嶉渶瑕佸湪concept琛ㄤ腑鎼滅儲錛岃幏寰楁墍闇鐨刢table鎸囬拡錛?/p> <p>    Swappable s=g; //Swappable鏄彟涓涓猚oncept<br></p> <p>    榪欑鎯呭喌鍚宒ynamic_cast鏋佸叾鐩鎬技銆備篃鍙互妯′豢鐫閲囩敤concept_cast涔嬬被鐨勬搷浣滅錛屼嬌寰梒oncept杞崲鏄懼紡鍖栵紝娑堥櫎闅愬紡杞崲鐨勯棶棰橈紙寮篶oncept鍖栵級銆?br></p>     鎵浠ワ紝Runtime Unbound鍦ㄨ繍琛屾椂concept鐨勪綔鐢ㄤ笅錛屽叿鏈夊悓鍔ㄥ鎬佺浉鍚岀殑搴曞眰琛屼負銆傚洜鑰岋紝浠栦滑鐨勬ц兘涔熸槸涓鏍風殑銆傚緢澶氱敤浜庡姩澶氭佺殑鏂規鍜岀畻娉曢兘鍙互鐩存帴鐢ㄤ簬榪愯鏃禼oncept銆?br> <h2>Runtime Unbound鍜孯untime Bound</h2>     瀵逛簬runtime unbound鍚宺untime bound涔嬮棿鐨勫樊寮傚墠闈㈠凡緇忔湁鎵灞曠ず銆傚湪鍏朵粬鏂歸潰錛屼袱鑰呰繕瀛樺湪鏇村鐨勫樊鍒?br>    棣栧厛錛屽氨鍍忕粯鍥炬渚嬩腑灞曠ず鐨勯偅鏍鳳紝runtime unbound鏄潪渚靛叆鐨勩俽untime unbound涓嶈姹傜被鍨嬬戶鎵胯嚜鍚屼竴綾誨瀷錛屽彧闇灝嗙被鍨嬪悓concept鍏寵仈璧鋒潵渚垮彲銆?br>    鍏舵錛宑oncept涓嶆槸涓縐嶅眬闄愪簬OO鐨勬妧鏈紝涓嶄粎娑夊強鎴愬憳鍑芥暟錛岃繕鍖呮嫭浜嗚嚜鐢卞嚱鏁幫紝鑼冨洿鏇村箍錛屾洿鍔犵伒媧匯?br>    鏈鍚庯紝瀹炵幇涓婏紝Runtime Unbound鍜孯untime Bound涔嬮棿鏈夋儕浜虹殑鐩鎬技涔嬪銆備袱鑰呴兘閲囩敤涓涓嚱鏁版寚閽堣〃浣滀負鎿嶄綔鍒嗘淳錛涢兘閲囩敤涓涓寚鍚戝嚱鏁拌〃鐨勬寚閽堜綔涓哄叆鍙o紱涓涓姩鎬佸璞′笂鐨刢oncept涔嬮棿鐨勮漿 鎹紝涔熷悓鍔ㄥ鎬佸璞′竴鏍鳳紝鍦ㄤ笉鍚岀殑鍑芥暟琛ㄩ棿鍒囨崲銆備粬浠敮涓鐨勪笉鍚岋紝鏄疄鐜版帴鍙g殑鏈哄埗銆?br>    鍔ㄥ鎬佺敤綾誨瀷鍏間換鎺ュ彛錛岄氳繃緇ф壙鍜岃櫄鍑芥暟瀹炵幇鎺ュ彛鐨勫姛鑳姐傜敤綾誨瀷浣滀負綾誨瀷鐨勬帴鍙o紝浣垮緱榪欎袱涓湰鏉ョ嫭绔嬬殑姒傚康浜ょ粐鍦ㄤ竴璧楓傚鍔犳暣涓被鍨嬩綋緋葷殑澶嶆潅搴﹀拰鑰﹀悎搴︺?nbsp;   concept鍒欏埄鐢ㄧ嫭绔嬬殑緋葷粺鎻忚堪銆佽〃杈懼拰綆$悊鎺ュ彛銆傜被鍨嬪垯鍥炲綊鍒拌〃杈句笟鍔″璞$殑鍔熻兘涓婃潵銆?br>    鍔ㄥ鎬佸湪浣跨敤綾誨瀷琛ㄨ揪鎺ュ彛鐨勬椂鍊欙紝渚垮緢瀹規槗鍦板紩鍏ヤ竴涓夯鐑︾殑闂錛岃〃杈懼姛鑳界殑綾誨瀷鍜岃〃杈炬帴鍙g殑綾誨瀷娣峰悎鍦ㄤ竴璧鳳紝浣跨敤鏃跺繀欏婚氳繃涓浜涙柟娉曞尯鍒嗗嚭鍝簺鏄帴鍙o紝 鍝簺鏄姛鑳界被鍨嬨傝繖澧炲姞浜嗗璞℃ā鍨嬬殑澶嶆潅鎬с傝宑oncept鍒欑嫭绔嬩簬綾誨瀷浣撶郴涔嬪錛屾墍鏈夊鎺ュ彛鐨勬搷浣滈兘鏄崟涓鐨勶紝媯绱㈠拰鍖歸厤鏉ュ緱鏇村姞鏂逛究蹇嵎銆?br>    浣滀負緇ф壙浣撶郴鐨勫熀紜閮ㄥ垎錛屽姩澶氭佺殑鎶借薄鎺ュ彛蹇呴』鍦ㄧ戶鎵跨粨鏋勭殑鏈欏剁銆傞偅涔堣繖浜涙娊璞$被鍨嬪繀欏誨厛浜庡叾浠栫被鍨嬪嚭鐜般傝繖瀵圭郴緇熺殑鏃╂湡璁捐浜х敓寰堝ぇ鐨勫帇鍔涳紝寰寰涓涓熀紜鎶借薄鎺ュ彛璁捐鏈夎錛屼究浼氶犳垚鏁翠釜浣撶郴鐨勫彉鏇淬?br>    鑰宑oncept鏄嫭绔嬩簬綾誨瀷鐨勶紝閭d箞浠諱綍鏃跺欓兘鍙互灝嗕竴涓被鍨嬪悓鎺ュ彛緇戝畾銆傛帴鍙g敋鑷沖彲浠ュ湪綾誨瀷浣撶郴鍩烘湰寤虹珛涔嬪悗鎵嶇‘瀹氥傝繖縐嶇伒媧繪у澶嶆潅杞歡鐨勫紑鍙戣嚦鍏抽噸瑕侊紝鍘繪帀浜嗛暱鏈熶互鏉ュ鍦ㄤ漢浠ご涓婄殑鏋烽攣銆?br>    鍓嶉潰宸茬粡鎻愬埌錛屽湪涓嶉渶瑕乧oncept杞崲鐨勬儏鍐典笅錛屾棤闇鎵ц榪愯鏃剁殑concept鍖歸厤錛屾墍鏈夌殑璋冪敤鍏鋒湁鍚屽姩澶氭佷竴鏍風殑鏁堢巼錛堥兘鏄棿鎺ヨ皟鐢級銆傚湪鎵ц concept杞崲鏃訛紝鏃犻渶璞″姩澶氭侀偅鏍峰湪澶嶆潅鐨勭戶鎵夸綋緋諱笂媯绱紝鍙渶鎵цconcept琛ㄧ殑hash鍖歸厤錛屾晥鐜囧弽鑰屾洿楂橈紝鑰屼笖鏇寸畝鍗曘傝冭檻鍒拌繖浜涙儏鍐碉紝 鎴戜滑鍙互璁や負<strong>concept鍖栫殑Runtime Unbound澶氭佸畬鍏ㄨ兘澶熸浛浠d紶緇熺殑鍔ㄥ鎬?/strong>銆備篃灝辨槸璇達紝鎴戜滑<strong>涓嶅啀闇瑕佸姩澶氭佷簡</strong>銆?br>     鎯寵薄涓涓嬶紝濡傛灉涓闂ㄨ璦鑳藉鎷ユ湁榪愯鏃禼oncept錛岄偅涔堝畠瀹屽叏鍙互鍙繚鐣橲tatic Unbound鍜孯untime Unbound澶氭侊紝鑰屾斁寮僐untime Bound澶氭併備竴鏃︽斁寮冨姩澶氭?娌℃湁浜嗚櫄鍑芥暟鍜岃櫄琛?錛岄偅涔堝璞℃ā鍨嬩究鍙互澶уぇ綆鍖栥傛墍鏈夊璞″彧闇瑕佺嚎鎬у垎甯冿紝鍩虹被鍜屾垚鍛樹緷嬈″爢鍙犲湪涓璧鳳紝涔熸病鏈? vtable鐨勫共鎵幫紝瀵硅薄緇撴瀯鍙互鍋氬埌鏈綆鍗曘傚悓鏃訛紝緇ф壙涔熷洖褰掍簡浠g爜閲嶇敤鐨勪紶緇熺敤閫斻傝屼笖錛屽璞$嫭绔嬩簬鎺ュ彛瀛樺偍錛屽湪鑳藉鍦ㄧ紪璇戞椂闈欐侀摼鎺ョ殑鏃跺欙紝鍙互浣? 涓洪潤鎬佸璞′嬌鐢ㄣ傝屽湪闇瑕佸姩鎬佸璞$殑鍦版柟錛屽張鍙互寰堝鏄撳湴杞崲鎴愬姩鎬佸璞★紝鍙渶瑕佷負鍏墮檮涓奵oncept琛ㄥ拰ctable銆備竴鍒囬兘綆鍖栦簡銆傚璞℃ā鍨嬩篃鏇村姞 瀹規槗緇熶竴銆?br>     榪欏浜庡緢澶氬簳灞傚紑鍙戠殑紼嬪簭鍛樺浜巆++澶嶆潅鑰屽張娣蜂貢鐨勫璞℃ā鍨嬮毦浠ユ帴鍙椼傚鏋滆兘澶熷簾闄よ櫄鍑芥暟錛岀畝鍖栧璞℃ā鍨嬶紝閭d箞瀵逛簬榪欎簺搴曞眰寮鍙戣岃█錛屽皢浼氬甫鏉ョ洿鎺ョ殑濂? 澶勩傚彧瑕佺‘淇濅笉浣跨敤concpt瀹氫箟瀵硅薄銆佸疄渚嬪寲妯℃澘錛屼究鍙互浣挎暣涓蔣浠舵墽琛孲tatic Unbound銆傝繖鐩稿綋浜庡幓鎺塐OP鐨凜++銆傚惁鍒欙紝灝卞惎鐢≧untime Unbound錛屽疄鐜拌繍琛屾椂澶氭併?br> <h2>鎬葷粨</h2>     Static Unbound鍜孯untime Unbound浣滀負涓瀵逛翰瀵嗘棤闂寸殑澶氭佹妧鏈紝浣撶幇浜嗘渶瀹屽杽鐨勬娊璞″艦寮忋備袱鑰呭悇韙炰竴鏂癸紝鐩鎬簰琛ュ厖錛岀浉浜掓敮鎻淬傝屼笖涓よ呭叿鏈夌粺涓鐨勮〃鐜板艦寮忥紝澶уぇ鏂逛究浜嗕嬌鐢紝 瀵逛簬杞歡宸ョ▼鍏鋒湁闈炲嚒鐨勬剰涔夈傚彟涓鏂歸潰錛孯untime Bound澶氭佷綔涓篛O鏃朵唬鐨勪駭鐗╋紝浣撶幇浜嗛潤鎬佺被鍨嬭璦鍦ㄨ繍琛屾椂澶氭佹柟闈㈢殑鏈澶у姫鍔涖備絾鏄紝闅忕潃榪愯鏃禼oncept鐨勫紩鍏ワ紝Runtime Unbound澶氭佽嚜韜瓨鍦ㄧ殑闈欐佺被鍨嬪畨鍏ㄩ棶棰樺拰鎬ц兘闂錛岄兘鑳藉寰楀埌寰堝ソ鐨勮В鍐熾傝嚦姝わ紝Runtime Unbound渚垮叿澶囦簡鏇夸唬Runtime Bound鐨勫疄鍔涖傜浉淇″湪涓嶄箙鐨勫皢鏉ワ紝Runtime Bound灝嗕細閫愭笎姝ュ叆瀹冪殑榛勬槒銆?br> <h2>鍙傝?/h2> <ol> <li>http://groups.google.com/group/pongba/web/Runtime+Polymorphic+Generic +Programming.pdf銆傚ぇ鐗涗漢Jaakko Järvi絳夊啓鐨勫叧浜嶳untime concept鐨勬枃绔狅紝璁茶В浜唕untime concept鐨勬蹇電殑瀹炵幇鏂規硶錛屽茍鍦–onceptC++涓婁互搴撶殑褰㈠紡瀹炵幇銆傚叾涓嬌鐢ㄤ紶緇熺殑鍔ㄥ鎬佸疄鐜皉untime concept錛岃繖琛ㄦ槑鍔ㄥ鎬佺殑瀹炵幇鏈哄埗鍚宺untime concept鏄竴鑷寸殑銆傚綋鐒跺簱鐨勫疄鐜板緢澶嶆潅錛岃繖鏄?#8220;铻鴻洺澹抽噷鍋氶亾鍦?#8221;錛屾棤濂堜箣涓俱俁untime concept榪樻槸搴斿綋鍦ㄨ璦涓璮irst-class鍦板疄鐜般?/li> <li>http://www.lubomir.org/academic/MinimizingCodeBloat.pdf銆備篃鏄疛aakko Järvi鍐欑殑錛岃繍琛屾椂鍒嗘淳鐨勬枃绔犮?/li> <li>http://opensource.adobe.com/wiki/index.php/Runtime_Concepts銆?/li> <li>Inside C++ Object Model銆?br> </li> </ol> <h2>闄勫綍 Runtime Concept鐨勫叿浣撳疄鐜?/h2>     鎴戜滑鏈変竴涓猚oncept錛?br>    concept Shape<T><br>    {<br>        void T::load(xml);<br>        void T::draw(device);<br>        void move(T&);<br>    }<br>    鍙﹀錛岃繕鏈変竴涓唬琛ㄥ渾鐨刢oncept錛?br>    concept Cycles<T> : <br>        CopyConstructable<T>,<br>        Assignable<T>,<br>        Swappable<T>,<br>        Shape<T><br>    {<br>         T::T(double, double, double);<br>        double T::getX();<br>         double T::getY();<br>         double T::getR();<br>         void T::setX(double);<br>         void T::setY(double);<br>         void T::setR(double);<br>     }<br>    鐜板湪鏈夌被鍨婥ycle錛?br>     class Cycle<br>     {<br>     public:<br>         Cycle(double x, double y, double r);<br>         Cycle(Cycle const& c);<br>         Cycle& operator=(Cycle const& c);<br>         void swap(Cycle const& c);<br>         void load(xml init);<br>         void draw(device dev);<br>         double getX();<br>         double getY();<br>         double getR();<br>         void setX(double x);<br>         void setY(double y);<br>         void setR(double r);<br>     private:<br>         ...<br>     };<br>     褰撳畾涔変竴涓姩鎬佸璞★細<br>     Shape g=Cycle();<br>     渚夸細褰㈡垚濡備笅鍥劇殑緇撴瀯錛?br> <div class="hvzpftn" id="w08n" style="padding: 1em 0pt; text-align: left;"> <div class="hvzpftn" id="ny7x" style="padding: 1em 0pt; text-align: left;"><img alt="" src="http://www.shnenglu.com/images/cppblog_com/longshanks/runtime_concept.JPG" height="338" width="648"><br> </div> </div>     g瀹為檯涓婃槸涓涓寚閽堬紝鎸囧悜concept琛ㄧ殑Shape欏癸紝鑰孲hape欏規寚鍚慡hape瀵瑰簲鐨刢table銆傜敱浜嶤ycle refine鑷猄hape絳変紬澶歝oncept錛岄偅涔圕ycle鐨刢table瀹為檯涓婂寘鍚簡榪欎簺concept鐨刢table錛屾墍浠ュ彧闇涓涓狢ycle鐨? ctable錛岃屽叾浠朿oncept閮藉垎鍒寚鍚戝叾涓悇鑷浉搴旂殑閮ㄥ垎銆俢table涓殑姣忎竴涓」鍒欐寚鍚戝叿浣撶殑鍑芥暟浣撱?br>     濡傛灉閬囧埌璇彞錛?br>     Swappable h=concept_cast<Swappable>(g);<br>     閭d箞錛屽皢浼氭墽琛屼竴涓悳绱紝鐢╟oncept Swappable鐨刬d錛堟瘮濡俬ash鐮侊級鍦╟oncept琛ㄤ腑媯绱㈡槸鍚﹀瓨鍦⊿wappable欏廣傚鏋滃瓨鍦紝灝卞皢瀵瑰簲欏圭殑鎸囬拡璧嬬粰h銆傝繖縐嶆搷浣滃悓 dynamic_cast鎿嶄綔闈炲父鐩鎬技錛屽彧鏄浉姣斿湪澶嶆潅鐨勫璞$粨鏋勪腑鏌ヨ鏇村姞綆鍗曡繀閫熴?br>     concept琛ㄧ疆浜庡璞$殑澶撮儴鎴栧熬閮紝榪欐槸涓轟簡渚夸簬瀵硅薄媯绱oncept鎺ュ彛銆傛瘡涓被鍨嬬殑ctable鍙渶涓浠姐?br>     瀵硅薄鏈綋鍙互寰堝鏄撳湴鍚宑oncept琛ㄥ垎紱伙紝鍦ㄥ畬鍏ㄩ潤鎬佺殑鎯呭喌涓嬶紝concept琛ㄦ槸涓嶉渶瑕佺殑銆傚鏋滈渶瑕乺untime澶氭侊紝鍔犱笂concept琛ㄥ嵆鍙?br> <br> <img src ="http://www.shnenglu.com/longshanks/aggbug/37915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/longshanks/" target="_blank">longshanks</a> 2007-12-06 17:20 <a href="http://www.shnenglu.com/longshanks/archive/2007/12/06/37915.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://04781900.com" target="_blank">国产精品人人做人人爽</a>| <a href="http://asanny.com" target="_blank">亚洲黄色成人网</a>| <a href="http://t3gg.com" target="_blank">亚洲乱码久久</a>| <a href="http://zz9876.com" target="_blank">欧美日韩一区二区在线</a>| <a href="http://817794.com" target="_blank">一本色道久久综合一区</a>| <a href="http://by8556.com" target="_blank">日韩视频免费观看高清完整版</a>| <a href="http://balqueen.com" target="_blank">欧美理论电影网</a>| <a href="http://xfrlyy.com" target="_blank">亚洲一区二区三区在线看</a>| <a href="http://aidingcai.com" target="_blank">宅男噜噜噜66国产日韩在线观看</a>| <a href="http://v58q.com" target="_blank">欧美色精品在线视频</a>| <a href="http://www-188444.com" target="_blank">欧美亚洲一区</a>| <a href="http://xkm663y.com" target="_blank">久久久久综合</a>| <a href="http://91pinping.com" target="_blank">一本色道久久加勒比88综合</a>| <a href="http://www330088.com" target="_blank">一区二区免费在线播放</a>| <a href="http://yishangsh.com" target="_blank">国产精品入口福利</a>| <a href="http://www11108b.com" target="_blank">免费看亚洲片</a>| <a href="http://51winner.com" target="_blank">欧美日韩精品不卡</a>| <a href="http://874805.com" target="_blank">久久久久国产精品人</a>| <a href="http://wwwyinyinai149.com" target="_blank">六月婷婷久久</a>| <a href="http://038226.com" target="_blank">亚洲一区亚洲二区</a>| <a href="http://679776.com" target="_blank">久久婷婷色综合</a>| <a href="http://66688811.com" target="_blank">亚洲男人天堂2024</a>| <a href="http://6677ch.com" target="_blank">久久综合电影一区</a>| <a href="http://33wbwb.com" target="_blank">性欧美videos另类喷潮</a>| <a href="http://shalitao.com" target="_blank">蜜桃av综合</a>| <a href="http://yiapk.com" target="_blank">欧美一区二区私人影院日本</a>| <a href="http://xingba999.com" target="_blank">麻豆久久久9性大片</a>| <a href="http://329374.com" target="_blank">亚洲自拍高清</a>| <a href="http://aidou28.com" target="_blank">免费在线亚洲欧美</a>| <a href="http://969093.com" target="_blank">久久久精品五月天</a>| <a href="http://www-493049.com" target="_blank">欧美视频久久</a>| <a href="http://126900.com" target="_blank">欧美黄网免费在线观看</a>| <a href="http://hakuihoso.com" target="_blank">国产欧美1区2区3区</a>| <a href="http://cao3e8c8.com" target="_blank">亚洲精品1区2区</a>| <a href="http://710691.com" target="_blank">狠狠色综合色区</a>| <a href="http://aiqianfang.com" target="_blank">亚洲夜间福利</a>| <a href="http://www-ss777.com" target="_blank">一个色综合av</a>| <a href="http://shanghaijiagu.com" target="_blank">美女黄色成人网</a>| <a href="http://iamsleekcn.com" target="_blank">久久精品国产免费观看</a>| <a href="http://smiczbb.com" target="_blank">欧美午夜电影一区</a>| <a href="http://zxxx3.com" target="_blank">亚洲国产一区二区三区高清</a>| <a href="http://77777kkk.com" target="_blank">国产一区二区三区四区hd</a>| <a href="http://2996611.com" target="_blank">一区二区免费在线观看</a>| <a href="http://www-42189.com" target="_blank">亚洲毛片在线</a>| <a href="http://ktt2048.com" target="_blank">免费观看久久久4p</a>| <a href="http://cmtqd.com" target="_blank">欧美成人免费在线视频</a>| <a href="http://1369080.com" target="_blank">国产综合色在线</a>| <a href="http://eguge.com" target="_blank">亚洲欧美网站</a>| <a href="http://wwww999.com" target="_blank">欧美一区二区三区电影在线观看</a>| <a href="http://taotuango.com" target="_blank">欧美日韩高清免费</a>| <a href="http://jsydjxgs.com" target="_blank">亚洲欧美一区二区三区极速播放</a>| <a href="http://sdgs6788.com" target="_blank">亚洲激情图片小说视频</a>| <a href="http://www4466k.com" target="_blank">久久国产黑丝</a>| <a href="http://laodaohang.com" target="_blank">欧美一区二区三区在线观看</a>| <a href="http://725443.com" target="_blank">欧美日韩成人在线播放</a>| <a href="http://jiarenlady.com" target="_blank">欧美激情第9页</a>| <a href="http://127mingdao.com" target="_blank">伊人色综合久久天天五月婷</a>| <a href="http://4449992.com" target="_blank">欧美在线观看你懂的</a>| <a href="http://977mo.com" target="_blank">香蕉久久精品日日躁夜夜躁</a>| <a href="http://47b8.com" target="_blank">国产精品高精视频免费</a>| <a href="http://pansinobbs.com" target="_blank">日韩视频在线免费观看</a>| <a href="http://566805.com" target="_blank">一本色道久久综合亚洲精品婷婷 </a>| <a href="http://xprinter3d.com" target="_blank">一区二区不卡在线视频 午夜欧美不卡在</a>| <a href="http://www11111111.com" target="_blank">亚洲欧美资源在线</a>| <a href="http://xtsjjw.com" target="_blank">久久精品国产77777蜜臀</a>| <a href="http://szjyf668.com" target="_blank">国产精品日韩精品欧美精品</a>| <a href="http://2016dp5330.com" target="_blank">亚洲天堂偷拍</a>| <a href="http://www-733999.com" target="_blank">午夜精品美女久久久久av福利</a>| <a href="http://dayomall.com" target="_blank">欧美日本视频在线</a>| <a href="http://06le.com" target="_blank">在线视频免费在线观看一区二区</a>| <a href="http://jiajianpei.com" target="_blank">国产精品99久久久久久久久</a>| <a href="http://xiaobi13.com" target="_blank">欧美视频在线播放</a>| <a href="http://xhs015.com" target="_blank">亚洲一区一卡</a>| <a href="http://012488.com" target="_blank">久久亚洲私人国产精品va媚药</a>| <a href="http://2629929.com" target="_blank">激情亚洲一区二区三区四区</a>| <a href="http://wwwmm7777.com" target="_blank">久久亚洲春色中文字幕</a>| <a href="http://ez4444.com" target="_blank">亚洲第一二三四五区</a>| <a href="http://www-4890.com" target="_blank">亚洲最新视频在线播放</a>| <a href="http://jiangnanmm.com" target="_blank">欧美日韩国产综合久久</a>| <a href="http://0755hqr.com" target="_blank">亚洲午夜精品久久久久久浪潮</a>| <a href="http://dh03.com" target="_blank">欧美一二三视频</a>| <a href="http://59199m.com" target="_blank">有码中文亚洲精品</a>| <a href="http://www3344xz.com" target="_blank">欧美精品免费播放</a>| <a href="http://8484vivo.com" target="_blank">亚洲一区美女视频在线观看免费</a>| <a href="http://430390.com" target="_blank">久久国产66</a>| <a href="http://012928.com" target="_blank">亚洲日本欧美</a>| <a href="http://817794.com" target="_blank">国产精品久久9</a>| <a href="http://www-77537.com" target="_blank">久久久精品免费视频</a>| <a href="http://gzxyh88.com" target="_blank">亚洲国产另类久久精品</a>| <a href="http://www-662553.com" target="_blank">亚洲在线一区二区三区</a>| <a href="http://xccp4888.com" target="_blank">国产亚洲精品v</a>| <a href="http://5456yy.com" target="_blank">欧美成人午夜</a>| <a href="http://xshgwy.com" target="_blank">午夜亚洲性色福利视频</a>| <a href="http://avse69.com" target="_blank">欧美黑人一区二区三区</a>| <a href="http://unrealcopgmail.com" target="_blank">亚洲私拍自拍</a>| <a href="http://www-964664.com" target="_blank">国内精品视频666</a>| <a href="http://842332.com" target="_blank">欧美日韩精品一区二区天天拍小说</a>| <a href="http://223tt.com" target="_blank">亚洲一区精品电影</a>| <a href="http://49234c.com" target="_blank">欧美激情网友自拍</a>| <a href="http://www35177.com" target="_blank">欧美在线视频一区二区三区</a>| <a href="http://5767j.com" target="_blank">亚洲国产精品一区制服丝袜</a>| <a href="http://wwwmiya728.com" target="_blank">欧美三日本三级少妇三99</a>| <a href="http://060969.com" target="_blank">欧美在线免费一级片</a>| <a href="http://quoviajes.com" target="_blank">亚洲欧洲一区二区在线播放</a>| <a href="http://555346.com" target="_blank">欧美伊人久久久久久久久影院</a>| <a href="http://000695.com" target="_blank">亚洲精品国产精品国自产观看 </a>| <a href="http://oo853kj.com" target="_blank">欧美在线观看一区二区</a>| <a href="http://sdjzzs.com" target="_blank">99日韩精品</a>| <a href="http://by3259.com" target="_blank">欧美黄色网络</a>| <a href="http://hafenchen.com" target="_blank">久久精品国产久精国产一老狼 </a>| <a href="http://www-tt211.com" target="_blank">极品少妇一区二区三区</a>| <a href="http://3dmh329.com" target="_blank">欧美性猛交99久久久久99按摩</a>| <a href="http://tp-88.com" target="_blank">久久久国产成人精品</a>| <a href="http://wy172.com" target="_blank">亚洲天堂免费观看</a>| <a href="http://18av-77.com" target="_blank">亚洲精品乱码久久久久久黑人 </a>| <a href="http://lorgou.com" target="_blank">欧美在线播放高清精品</a>| <a href="http://www-132377.com" target="_blank">亚洲黄色片网站</a>| <a href="http://342008.com" target="_blank">国产欧美一区二区三区久久人妖</a>| <a href="http://montnove.com" target="_blank">欧美精品成人</a>| <a href="http://anquye16.com" target="_blank">久久免费视频一区</a>| <a href="http://133969.com" target="_blank">午夜亚洲一区</a>| <a href="http://my8823.com" target="_blank">亚洲欧美日韩综合国产aⅴ</a>| <a href="http://787622.com" target="_blank">亚洲日本理论电影</a>| <a href="http://099idc.com" target="_blank">欧美国产精品人人做人人爱</a>| <a href="http://3314133.com" target="_blank">欧美在线日韩</a>| <a href="http://www-24333.com" target="_blank">欧美一区二区三区免费大片</a>| <a href="http://www1122fu.com" target="_blank">一区二区三区日韩精品</a>| <a href="http://www-45553.com" target="_blank">亚洲美女黄网</a>| <a href="http://66666556.com" target="_blank">亚洲精品美女久久7777777</a>| <a href="http://www515678.com" target="_blank">激情婷婷欧美</a>| <a href="http://00000i.com" target="_blank">精久久久久久久久久久</a>| <a href="http://szjyf668.com" target="_blank">国产在线精品成人一区二区三区 </a>| <a href="http://zjkgjt.com" target="_blank">亚洲一区二区三区在线播放</a>| <a href="http://nnnn34.com" target="_blank">日韩亚洲欧美一区</a>| <a href="http://baixinlocal.com" target="_blank">最新成人av网站</a>| <a href="http://tristooges.com" target="_blank">亚洲福利小视频</a>| <a href="http://4449992.com" target="_blank">亚洲国产精品va在看黑人</a>| <a href="http://zisxks.com" target="_blank">尤物99国产成人精品视频</a>| <a href="http://xingmaokeji.com" target="_blank">国内久久精品</a>| <a href="http://caihongie.com" target="_blank">精品69视频一区二区三区</a>| <a href="http://x946.com" target="_blank">黑人一区二区三区四区五区</a>| <a href="http://bjrailtech.com" target="_blank">国产日韩综合一区二区性色av</a>| <a href="http://haole081.com" target="_blank">国产美女精品免费电影</a>| <a href="http://1188188.com" target="_blank">国产精品腿扒开做爽爽爽挤奶网站</a>| <a href="http://baoyou118.com" target="_blank">欧美亚州在线观看</a>| <a href="http://mide776.com" target="_blank">国产精品美女999</a>| <a href="http://bizhijidi.com" target="_blank">国产麻豆精品在线观看</a>| <a href="http://niu96.com" target="_blank">国产亚洲欧美激情</a>| <a href="http://3dxxoo.com" target="_blank">精品不卡在线</a>| <a href="http://521mu.com" target="_blank">最新高清无码专区</a>| <a href="http://56x6.com" target="_blank">亚洲深爱激情</a>| <a href="http://sdjzzs.com" target="_blank">欧美在线不卡</a>| <a href="http://488089.com" target="_blank">免费视频亚洲</a>| <a href="http://4430x.com" target="_blank">亚洲精品美女在线观看播放</a>| <a href="http://syntheticnets.com" target="_blank">亚洲精选视频免费看</a>| <a href="http://4bbbbb.com" target="_blank">亚洲天堂av高清</a>| <a href="http://www-119049.com" target="_blank">欧美在线资源</a>| <a href="http://188293.com" target="_blank">欧美风情在线</a>| <a href="http://5555547.com" target="_blank">国产精品久久久久av免费</a>| <a href="http://2061851.com" target="_blank">国产美女精品</a>| <a href="http://52wenxiu.com" target="_blank">最新国产乱人伦偷精品免费网站</a>| <a href="http://338pv.com" target="_blank">亚洲美女色禁图</a>| <a href="http://53xxxx.com" target="_blank">欧美亚洲在线观看</a>| <a href="http://18av18.com" target="_blank">欧美成人综合</a>| <a href="http://344230.com" target="_blank">在线综合亚洲</a>| <a href="http://56718ca.com" target="_blank">久久性色av</a>| <a href="http://428368.com" target="_blank">国产精品久久91</a>| <a href="http://tao62bao.com" target="_blank">亚洲二区三区四区</a>| <a href="http://97caoporm.com" target="_blank">亚洲图片在区色</a>| <a href="http://caca060.com" target="_blank">久久久久久网站</a>| <a href="http://2cc8.com" target="_blank">99精品欧美一区二区三区</a>| <a href="http://8558585.com" target="_blank">香港成人在线视频</a>| <a href="http://miandoctor.com" target="_blank">欧美阿v一级看视频</a>| <a href="http://bjrailtech.com" target="_blank">国产精品久久久99</a>| <a href="http://sdjzzs.com" target="_blank">亚洲国产精品女人久久久</a>| <a href="http://5566kan.com" target="_blank">亚洲综合视频在线</a>| <a href="http://showrti.com" target="_blank">欧美成年人网站</a>| <a href="http://www344399.com" target="_blank">亚洲中无吗在线</a>| <a href="http://babylonmovi.com" target="_blank">欧美福利一区</a>| <a href="http://www47777.com" target="_blank">国产一区二区久久久</a>| <a href="http://99cheats.com" target="_blank">99国产成+人+综合+亚洲欧美</a>| <a href="http://32tun.com" target="_blank">午夜精品久久久久久久白皮肤</a>| <a href="http://11b29.com" target="_blank">久热这里只精品99re8久</a>| <a href="http://yeyesaoqi.com" target="_blank">一本色道久久综合</a>| <a href="http://1616mz.com" target="_blank">久久综合久久久久88</a>| <a href="http://wwwqm9.com" target="_blank">国产精品久久久一区二区</a>| <a href="http://www-65581.com" target="_blank">亚洲国产精品www</a>| <a href="http://cecelife.com" target="_blank">欧美在线观看日本一区</a>| <a href="http://49028b.com" target="_blank">亚洲国产欧美日韩</a>| <a href="http://nc04.com" target="_blank">久久av一区二区三区亚洲</a>| <a href="http://91porn42.com" target="_blank">欧美日韩午夜剧场</a>| <a href="http://xiaofan123.com" target="_blank">亚洲国产成人在线播放</a>| <a href="http://dsjgqc.com" target="_blank">欧美一区二区三区在线观看视频</a>| <a href="http://gzxyh88.com" target="_blank">亚洲第一精品久久忘忧草社区</a>| <a href="http://actinview.com" target="_blank">久久久久九九视频</a>| <a href="http://shno1steel.com" target="_blank">欧美日韩在线视频一区二区</a>| <a href="http://www330088.com" target="_blank">国产一区二区三区精品欧美日韩一区二区三区 </a>| <a href="http://794238.com" target="_blank">亚洲午夜精品久久久久久浪潮</a>| <a href="http://710191.com" target="_blank">久久在线视频在线</a>| <a href="http://gg5gg.com" target="_blank">国产亚洲制服色</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>