锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国内外成人免费激情在线视频,国产精品伊人日日,欧美日韩1区2区http://www.shnenglu.com/huaxiazhihuo/category/21252.htmlzh-cnWed, 05 Jul 2017 06:10:31 GMTWed, 05 Jul 2017 06:10:31 GMT60瀹屽鐨勮繍琛屾椂綾誨瀷淇℃伅http://www.shnenglu.com/huaxiazhihuo/archive/2017/07/05/215052.html鍗庡涔嬬伀鍗庡涔嬬伀Wed, 05 Jul 2017 03:45:00 GMThttp://www.shnenglu.com/huaxiazhihuo/archive/2017/07/05/215052.htmlhttp://www.shnenglu.com/huaxiazhihuo/comments/215052.htmlhttp://www.shnenglu.com/huaxiazhihuo/archive/2017/07/05/215052.html#Feedback0http://www.shnenglu.com/huaxiazhihuo/comments/commentRss/215052.htmlhttp://www.shnenglu.com/huaxiazhihuo/services/trackbacks/215052.html浼楁墍鍛ㄧ煡錛岀爜鐚垮啓浠g爜錛岃嚜鐒惰姹備弗璋ㄥ懆瀵嗭紝孌婁笉鐭ユ兂璞″姏涔熷緢閲嶈銆傛湰搴ч槄鐮佸嚑鍗佸勾錛屽緢鏄劅姒傚緢澶氱爜鐚跨殑鑴戞礊琚ぇ澶х閿紝椴滄湁浜鴻兘瓚婇浄姹犱竴姝ワ紝鐗瑰埆鏄痗++鐨勫悓瀛︼紝榪炲悓濮斿憳浼氱殑閭d竴鍧ㄨ佸ご瀛愶紝閮藉緢璁╀漢鏃犺鑷蟲瀬錛屽嚭鑷繖浜涗漢鐨勪綔鍝侊紝閮芥槸涓涓楸肩溂鐫涙牱瀛愶紝鍗冧漢涓闈紝姣棤鐏靛姩涔嬬敓瓚e彲璦銆俿tl錛宐oost榪欎簺搴撻兘鏄繖鏍峰瓙錛堣櫧鐒跺畠浠‘瀹炲彲浠ュ畬鎴愬ぇ澶氭暟鏃ュ父浠誨姟錛夛紝鏇村埆璇村叾浠栫殑搴擄紝娌℃湁浠涔堣浜鴻崇洰涓鏂頒箣澶勩?br />
灝辮璇村姩鎬佺被鍨嬩俊鎭繖鍧楋紝鍙堟垨鑰呰鏄弽灝勩傝嚜鐒訛紝璇█鏈韓鎻愪緵鐨勫簾鐗﹖ype_info灝辨噿寰楄浜嗭紝闄や簡璇佹槑c++涔熶笢鏂芥晥棰︼紝涔熻兘鏀寔鍔ㄦ佷俊鎭箣澶栵紝灝卞埆鏃犵敤澶勪簡錛屾湁璋佷細姝e効鍏粡鐨勭敤type_info鍋氱偣姝e効鍏粡鐨勪簨鎯呭憿銆傚洜姝わ紝鍚勮礬浜洪┈綰風悍涓婇樀錛岄兘瑕佸譏琛++鍦ㄨ繍琛屾椂綾誨瀷淇℃伅涓婄殑緙哄け銆傚洜涓虹被鍨嬬殑鍙嶅皠淇℃伅瀹炲湪澶噸瑕侊紝鎴栬呰錛屽弽灝勭殑鐢ㄦ涔嬪湴澶澶錛岃〃闈笂寰堝浜嬫儏涓嶉渶瑕佸弽灝勶紝鎴栬呭瓧闈唬鐮佷笂灝辯湅涓嶅埌鍙嶅皠鐨勭棔榪癸紝浣嗘槸鍐呴噷鐨勫疄鐜幫紝澶ф妸澶ф妸鐨勫弽灝勫湪鍙戝厜鍙戠儹銆俢++鍧氭寔涓嶅湪鍔ㄦ佷俊鎭笂緇欎簣涓鐐圭偣澶氫綑鐨勬敮鎸侊紝騫朵笉琛ㄧずc++灝變笉闇瑕佸弽灝勪簡錛岀湅鐪嬫爣鍑嗗簱榪欎釜鏋佸姏鍥為伩鍔ㄥ鎬佺殑鍏歌寖錛屾槸涓涓庢牱鐨勫け璐ヤ綔鍝侊紝鍡紝榪欎釜浠ュ悗鍐嶈皥鍚с傚亣濡俿tl涓寮濮嬪氨娌℃湁濡傛澶у姏鎺掓枼鍔ㄥ鎬侊紝浣犵湅鐪嬪氨榪炲唴瀛樺垎閰嶇殑allocator閮藉彲浠ュ仛鍒伴潤鎬佺被鍨嬩俊鎭噷闈紙鏈鏂扮増鐨刢++緇堜簬涔熻鎺ュ彈澶氭佺殑allocator錛宑++鐣屽眳鐒朵竴鐗囨鍛奸紦鑸烇紝鐪熸槸鎮(zhèn)插搥錛夛紝浠婃椂浠婃棩鐨刢++灝變笉浼氬湪寰堝棰嗗煙涓婂埌澶勫壊鍦版眰鍜屻?br />
鎬葷殑鏉ヨ錛岀幇鍦ㄥ競闈笂鐨刢++鍙嶅皠搴擄紝閮芥槸渚靛叆寮忥紝閮藉鐫mfc閭d竴濂楋紝閮芥槸瑕佹眰緇ф壙鑷竴涓熀綾籓bject錛岀劧鍚庢墠鑳藉澶栨彁渚涘弽灝勪俊鎭殑鍔熻兘錛屽厛涓嶈瀹冧滑鎻愪緵鐨勭被鍨嬩俊鎭槸鍚﹀畬澶囷紝榪欐牱瀛愬氨鎶婄敤閫斿箍娉涢檺鍒舵鍦ㄤ竴涓緢紿勫緢紿勭殑灝忓湀瀛愰噷闈簡銆傝繖浜涘弽灝勫簱錛?銆佷笉鑳藉弽灝勫熀鏈被鍨嬶紝int銆乧har銆乨ouble銆乧onst char*銆?#8230;…絳夛紱2銆佷笉鑳藉弽灝勯潪緇ф壙鑷狾bject鐨刢lass鎴栬卻truct錛?銆佷篃涓嶈兘鍙嶅皠妯℃澘綾伙紝姣斿vector<int>銆乴ist<vector<vector<int>>>銆傝櫧鐒秚ypeid鍗冭埇寮遍浮錛屼絾涔熼潪涓鏃犳槸澶勶紝璧風爜闈炰鏡鍏ャ佸鉤絳夈佸鎬併傛墍浠ワ紝鐞嗘兂鐨勫弽灝勶紝搴旇鍍廲++鍘熺敓鐨則ypeid閭f牱鏃犺壊鏃犲懗錛?銆侀潪渚靛叆寮忕殑錛?銆佸彲浠ュ鎵鏈夌殑綾誨瀷閮芥彁渚涘弽灝勶紝鍩烘湰綾誨瀷銆侀潪Object緋葷殑struct鎴栬卌lass銆乼emplate綾誨瀷鐨勶紱3銆佸鎬佺殑錛屽彧瑕佹敼綾誨瀷闇瑕佽繍琛屾椂鐨勭被鍨嬭瘑鍒紝閭d箞灝辮繑鍥炲叾鏈韓鐨勭被鍨嬶紙瀛愮被錛夛紝鑰岄潪瀛楅潰涓婄殑澹版槑綾誨瀷錛?銆佹敮鎸佺被鍨嬪弬鏁幫紝涔熷嵆鏄錛屼互綾誨瀷浼犻掔粰璇ュ嚱鏁版椂錛屽氨榪斿洖鐩稿簲鐨勭被鍨嬩俊鎭璞°?br />
璇村緱鍏蜂綋涓鐐癸紝鎴戜滑瑕佹眰鐨勫弽灝勫簱鏄繖鏍峰瓙鐨勩傚綋鐒訛紝棣栧厛瑕佹湁涓涓被鍨嬩俊鎭璞ypeInfo錛岄噷闈㈣婊′簡鍏充簬瀵逛簬綾誨瀷鐨勬墍鏈夎緇嗕俊鎭傚涓嬫墍紺猴細鍙互鐚滃埌榪欑鍙嶅皠涓嬫鏋訛紝鍙敮鎸佸崟緇ф壙錛岃繖鏄晠鎰忕殑銆?br />
    struct TypeInfo
    {
    
public:
        template
<typename Args>
        
void ConstructObject(void* obj, MemoryAllocator* alloc, Args&& args)const錛?br />        bool IsDerviedOf(const TypeInfo* base)const;

    
public:
        
virtual TIType GetTIType()const = 0;
        
virtual const InterfaceMap* GetInterfaces()const錛?br />        virtual jushort GetMemorySize()const錛?br />        virtual ConstText GetName() const錛?br />        virtual AString GetFullName()const錛?br />        virtual jushort GetAlignSize() const錛?br />        virtual ConstText GetSpaceName()const;
        
virtual const TypeInfo* GetBaseTypeTI()const;
        
virtual const TypeInfo* GetPointeedTI()const錛?br />        virtual size_t GetHashCode(const void* obj)const;
        
virtual bool IsValueType()const { return true; }
        
virtual bool IsClass()const { return true; }

        
virtual bool DoInitAllocator(void* obj, MemoryAllocator* memAlloc)const;
        
virtual bool NeedDestruct()const { return false; }
        
virtual void DoDefaultConstruct(void* obj)const;
        
virtual bool CanDefaultConstruct()const { return true; }
        
virtual void DoAssign(void* dest, const void* src)const;
        
virtual bool Equals(const void* objA, const void* objB)const;
        
virtual void DoDestruct(void* obj)const;
        
    };
鐒跺悗錛屽氨瑕佹湁涓涓嚱鏁癟ypeOf錛屽簲璇ユ槸涓や釜錛屼竴涓槸鏃犲弬鏁扮殑綾誨瀷妯℃澘鍑芥暟錛屽彲浠ヨ繖鏍瘋皟鐢紝TypeOf<type>()錛涗竴涓槸鏈変竴涓弬鏁扮殑綾誨瀷妯℃澘鍑芥暟錛屽彲浠ヨ繖鏍瘋皟鐢紝TypeOf(obj)銆備笉綆℃槸閭d竴涓紝鍏惰繑鍥炵粨鏋滈兘鏄痗onst TypeInfo*銆俆ypeOf鐨勮鍋氬埌鐨勪簨鎯呮槸錛屽浜庢瘡涓縐嶇被鍨嬶紝鏈変笖鍙湁涓涓敮涓鐨凾ypeInfo瀵硅薄涓庝箣瀵瑰簲錛屼笉綆℃槸template鐨勮繕鏄潪template鐨勶紱姣斿錛屼互涓嬬殑鍑犱釜鍒ゆ柇蹇呴』鎴愮珛銆?br />TypeOf<int>() == TypeOf<int>();
TypeOf<int>() == TypeOf(n);    //n涓烘暣鍨?br />TypeOf<vector<int>>() == TypeOf(nums);//nums鐨勭被鍨嬩負vector<int>
Object* a = new ObjectA; TypeOf(a) == TypeOf<ObjectA>();
鍏跺疄榪欓噷闈㈢殑鍘熺悊涔熸病浠涔堢濂囷紝鏃犻潪灝辨槸trait閰嶅悎sfine錛屾帴涓嬫潵灝卞叏閮ㄩ兘鏄嫤鍔涙椿錛屽氨鏄負姣忎竴縐嶇被鍨嬮兘涓撻棬鐗瑰寲涓涓緇嗘弿榪扮殑綾誨瀷瀵硅薄錛岀敤瀹忓彲浠ヨ妭鐪佸ぇ閲忕殑浠g爜銆備絾鏄暣涓弽灝勫簱錛屾湰搴у墠鍓嶅悗鍚庨噸鏋勪簡鍗佸嚑嬈★紝鐜板湪涔熻繕鍦ㄩ噸鏋勪箣涓紝緇堢┒榪樻槸瑙e喅浜嗗紑鍙戜笂鎵閬囧埌鐨勫悇縐嶄簨鎯呫傛瘮濡傦紝搴忓垪鍖栵紙鏀寔鎸囬拡銆佹敮鎸佸鎬侊級銆佸璞′笌xml鐨勪簰鎹€佸璞′笌json鐨勪簰鎹€佹暟鎹簱琛ㄨ鍐欏璞°佹牸寮忓寲銆丄ny綾誨瀷銆侀潪渚靛叆寮忔帴鍙c佹秷鎭彂閫併佸瓧絎︿覆鐢熸垚瀵硅薄絳夌瓑銆?br />鍏跺疄鐜版柟寮忥紝姒傛嫭璧鋒潵錛屽氨鏄紩鍏ラ棿鎺ュ眰鍏冨嚱鏁癟ypeInfoImp涓撻棬鐢ㄤ簬榪斿洖涓涓被鍨媡ype錛宼ype閲岄潰鏈変竴涓狦etTypeInfo()鐨勫嚱鏁般傜劧鍚嶵ypeOf璋冪敤TypeInfoImp閲岀殑type鐨凣etTypeInfo()鏈緇堝緱鍒癟ypeInfo瀵硅薄銆備唬鐮佸涓嬫墍紺恒?br />
    template<typename Ty> struct TypeInfoImp
    {
        typedef Ty type;
        
static const bool value = THasGetTypeInfoMethod<Ty>::value;
    };

    template
<typename Ty>
    
struct TypeInfoImp<const Ty> : public TypeInfoImp<Ty>
    {
        typedef typename TypeInfoImp
<Ty>::type type;
        
static const bool value = TypeInfoImp<Ty>::value;
    };
    
    template
<typename Ty>
    
const TypeInfo* TypeOf()
    {
        typedef typename TypeInfoImp
<Ty>::type TypeInfoProvider;
        
return TypeInfoProvider::GetTypeInfo();
    }
    
    template
<typename Ty>
    
const TypeInfo* TypeOf(const Ty& obj)
    {
        typedef typename IsRttiType
<Ty>::type is_rtti;    //鍙堟槸闂存帴灞傦紝瀵瑰姩鎬佺被鍨嬪拰闈炲姩鎬佺被鍨嬪垎鍒鐞?/span>
        return ImpTypeOf(obj, is_rtti());
    }
    
    template
<>
    
struct TypeInfoImp < bool >
    {
        
static const bool value = true;
        typedef TypeInfoImp
<bool> type;
        
static TypeInfo* GetTypeInfo();
    };
        
    TypeInfo
* TypeInfoImp<bool>::GetTypeInfo()
    {
        
static TypeInfo* ti = CreateNativeTypeInfo<bool>("bool");
        
return ti;
    }
鍙兘鍙互鏈夌畝媧佺殑鏂瑰紡錛屾瘮濡備笉闇瑕佸紩鍏ypeInfoImp錛屼絾鏄疄闄呮渶緇堣瘉鏄嶵ypeInfoImp鐨勬柟寮忔渶鍏風伒媧繪т篃鏈鑳借妭鐪佷唬鐮併傛渶璧風爜錛屽畠鍦ㄨ嚜瀹氫箟鐨剆truct鎴栬卌lass灝卞緢鏂逛究錛屽彧瑕佹敼struct鍐呴儴鍖呭惈涓涓狦etTypeInfo()鐨勫嚱鏁幫紝瀹冨氨鍙互琚撼鍏ypeOf浣撶郴涓紝闈炲父鏂逛究銆傚浜庢ā鏉跨被鍨嬬殑TypeInfoImp錛屽氨瑕佺敤鍒板搱甯岃〃浜嗐傛瘮濡傦紝瀵逛簬std::paira鐨勭被鍨嬩俊鎭紝濡備笅瀹炵幇錛?br />    template<typename FstTy, typename SndTy>
    struct TypeInfoImp < std::pair<FstTy, SndTy> >
    {
        static const bool value = true;
        typedef TypeInfoImp < std::pair<FstTy, SndTy> > type;
        static TypeInfo* GetTypeInfo()
        {
            ParamsTypeInfo<FstTy, SndTy> args;
            return PodPair::LookupTemplateTypeInfo(args);
        }
    };
鎻愬彇鍏剁被鍨嬪弬鏁扮殑const TypeInfo*錛岀敓鎴愭暟緇勩傜敤姝ゆ暟緇勫埌PodPair鐨勫搱甯岃〃閲岄潰鏌ユ壘錛屽鏋滃搱甯岃〃涓互鏈夋綾誨瀷鏁扮粍鍙傛暟鐨勫璞″氨榪斿洖錛屽惁鍒欒鍒涘緩涓涓坊鍔犱竴鏉″搱甯屾潯鐩紝鐒跺悗榪斿洖銆傛瘡涓涓硾鍨嬬被鍨嬶紝姣斿vector錛宭ist錛宲air閮芥湁涓涓睘浜庤嚜宸辯殑鍝堝笇琛ㄣ?br />鎵撳畬鏀跺伐銆傚師鐞嗗緢綆鍗曪紝浣嗘槸瀵逛簬宸ヤ笟綰х殑鍙嶅皠搴擄紝瑕佽冭檻寰堝緇嗚妭錛屾瘮濡傦紝TypeInfo瀵硅薄鐨勫唴瀛樼鐞嗭紱鎬庝箞涓篹num綾誨瀷鐢熸垚涓鍫嗗瓧絎︿覆錛屼互鏀寔瀛楃涓插拰enume鍊肩殑浜掔浉杞崲錛涚敓鎴愬茍淇濆瓨class鐨勬瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟鎸囬拡錛涘懡鍚嶇┖闂寸殑鏀寔錛涗豢鐪烠#閲岄潰鐨刟ttribute錛涘浣曚互鏈鏂逛究鐨勬柟寮忕敓鎴愭垚鍛樺瓧孌墊垨鑰呮垚鍛樺嚱鏁頒俊鎭瓑絳夛紝涓鍙ヨ瘽錛屽氨鏄粬濡堢殑浣撳姏媧匯備絾鏄紝鍥炴姤鏄緢涓扮洓鐨勶紝榪欓噷鐨勮嫤鍔涙椿鍋氬畬涔嬪悗錛岀▼搴忕殑鍏朵粬鍦版柟涓婏紝鍩烘湰涓婏紝灝辨病鏈変粈涔堥噸澶嶇浉浼肩殑浠g爜錛屼竴鍒囩殑浣撳姏宸ヤ綔鍏ㄩ儴灝卞彲浠ュ帇鍦ㄧ被鍨嬩俊鎭繖閲屼簡銆?/div>

]]>
棰勫鐞嗕箣姝f暣鍨?/title><link>http://www.shnenglu.com/huaxiazhihuo/archive/2017/07/04/215050.html</link><dc:creator>鍗庡涔嬬伀</dc:creator><author>鍗庡涔嬬伀</author><pubDate>Tue, 04 Jul 2017 06:21:00 GMT</pubDate><guid>http://www.shnenglu.com/huaxiazhihuo/archive/2017/07/04/215050.html</guid><wfw:comment>http://www.shnenglu.com/huaxiazhihuo/comments/215050.html</wfw:comment><comments>http://www.shnenglu.com/huaxiazhihuo/archive/2017/07/04/215050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huaxiazhihuo/comments/commentRss/215050.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huaxiazhihuo/services/trackbacks/215050.html</trackback:ping><description><![CDATA[<div>      铏界劧閫氳繃涓緋誨垪鐨勫鎶娣閥錛岃棰勫鐞嗕篃鍥劇伒瀹屽涓鎶婏紝浣嗘槸鐢ㄩ澶勭悊鏉ュ仛璁$畻錛岀湡鐨勫緢鍚冨姏涓嶈濂姐傚洜涓洪澶勭悊涓寮濮嬭璁″嚭鏉ョ殑鐩殑錛屽氨娌′粈涔堥噹蹇冿紝鍘熸湰灝變粎浠呭彧鏄負浜嗗仛綆綆鍗曞崟鐨勬枃鏈浛鎹㈠伐浣滐紝騫舵病鏈夋兂榪囪鎴愪負姝e効鍏粡鐨勭紪紼嬭璦錛屽嵆渚挎槸鏈鏈緙╂按鐗堣剼鏈璦鐨勫姛鑳借姹傞兘杈句笉鍒般傚彧鏄悗鏉ワ紝瀹炲湪鏄ぇ閲忚姹傝鎵歸噺鑷姩鐢熸垚浠g爜錛岀壒鍒槸c++11涔嬪墠鐨勭増鏈帺浠涔堟ā鏉垮厓緙栫▼錛岄摵澶╃洊鍦扮殑瑕佹湁澶ч噺鐩鎬技鐨勪唬鐮併傝繖浜涗唬鐮佺敤鍏朵粬宸ュ叿鏉ョ敓鎴愶紝褰撶劧褰㈠紡浼氭洿鍔犳紓浜紝浣嗘槸濮嬬粓榪樻槸鐢ㄥ師鐢熺殑棰勫鐞嗘潵鍋氳繖縐嶄簨鎯呬細鏇村姞鐨勬柟渚匡紝鍚﹀垯姣忔淇敼錛岄兘瑕佽繍琛屼竴閬嶅閮ㄥ伐鍏鳳紝閮介夯鐑﹀晩錛佹湰浜烘槸鍊懼悜浜庣敤棰勫鐞嗘潵鐢熸垚浠g爜鐨勩傚彟澶栵紝c++11涔嬪悗錛岀殑紜師鏉ュ緢澶氶渶瑕佸畯鏉ョ敓鎴愪唬鐮佺殑鍦哄悎宸茬粡涓嶅繀瑕佷簡錛屼絾鏄洜涓篶++11鐨勭被鍨嬫帹瀵艱兘鍔涘ぇ澶у姞寮轟簡涔嬪悗錛屽彂鐜板張鏈変竴澶ф嘗鍦版柟鍙互鐢ㄥ畯鏉ョ敓鎴愪唬鐮佷簡銆傚茍涓嶆槸璇碈++涓殑瀹忔槸蹇呬笉鍙皯涔嬬墿錛屼絾鏄敤浜嗗畯錛岀湡鐨勫彲浠ュ噺灝戝緢澶氬緢澶氱殑閲嶅浠g爜錛岃搗鐮佺焊闈笂鐨勪唬鐮佹竻鐖戒簡寰堝銆?nbsp;    <div>           </div>      棰勫鐞嗙殑鍘熺敓鏁版嵁綾誨瀷灝卞彧鏈夌鍙鳳紝鐒跺悗絎﹀彿鍙敮鎸?#鐨勫茍鎺ヨ繍綆楋紝鍚屾椂錛岄澶勭悊涔熻兘璇嗗埆騫舵帴鍚庣殑緇撴灉錛堝惁鍒欙紝騫舵帴榪愮畻灝辨病鎰忎箟浜嗭級錛屽鏋滄槸瀹忓嚱鏁幫紝灝辮繘琛岃皟鐢ㄦ搷浣滐紝濡傛灉鏄畯絎﹀彿錛屽氨鏇挎崲鏂囨湰錛屽鏋滀粈涔堥兘涓嶆槸錛屽氨浠涔堥兘涓嶅仛錛屼繚鐣欑鍙楓備絾鏄繖鏍風殑寮遍浮綾誨瀷錛屾樉鐒惰繙榪滀笉鑳芥弧瓚崇緇忓彌閬撶殑鐮佺尶闇瑕併傜粡榪囧ぇ閲忕殑瀹忕紪紼嬬殑灝濊瘯涔嬪悗錛屽彲浠ュ緢鑲畾涓鐐癸紝棰勫鐞嗛噷闈㈠彧鑳藉啀妯℃嫙鍑烘潵涓縐嶆暟鎹被鍨嬶紝閭e氨鏄鏁存暟錛岃櫧鐒墮氳繃琛ョ爜榪愮畻鏉ヤ豢鐪熻礋鏁幫紝浣嗘槸鐢變簬棰勫鐞嗛噷闈㈢殑絎﹀彿涓嶈兘鍖呭惈鍑忓彿(-)瀛楃錛屽綋鐒惰鑺卞ぇ鍔涙皵鎹i紦璐熸暣鏁頒篃鏄彲浠ョ殑錛屽彧鏄嬌鐢ㄤ笂涔熶笉鏂逛究涔熶笉鐩磋錛屾т環(huán)姣斾笉楂橈紝鍩烘湰涓婏紝蹇呴』鐢ㄥ畯鏉ョ敓鎴愪唬鐮佺殑鍦版柟錛岄兘鍙互涓嶉渶瑕佽礋鏁存暟鐨勩?br /><br /><div>     鍙﹀錛岄澶勭悊涔熸病鏈夊彉閲忕被鍨嬬殑姒傚康錛屼笉瑕佽寮虹被鍨嬶紝灝辮繛寮辯被鍨嬩篃涓嶆槸錛屽畬鍏ㄥ氨鏄棤綾誨瀷銆傛鏁存暟綾誨瀷鐨勬蹇靛叏闈犵爜鐚夸漢鑲夌紪璇戝櫒鏉ョ淮鎶わ紝涓涓驚鐜殑瀹忎唬鐮佺敓鎴愪竴鑸兘鏄潵鏉ュ洖鍥炰篃涓嶇煡閬撹皟鐢ㄤ簡澶氬皯灞傚畯璋冪敤錛屼換浣曚竴涓湴鏂瑰嚭閿欙紝鏈夋椂鍊欐槸鍑犲惃瀵嗗瘑楹婚夯鐨勪腑闂村け璐ヤ唬鐮侊紙緙栬瘧鍣ㄧ殑棰勫鐞嗙紦鍐叉孩鍑猴紝寮冩鎶曢檷錛夛紝鏈夋椂鍊欏氨瀹屽叏娌℃湁杈撳嚭錛屾病鏈変換浣曚竴涓佺偣鐨勬彁紺猴紝綆鐩存槸澶ф搗鎹為拡鐨勬壘闂銆傚洜姝わ紝鍦ㄧ敤瀹忓驚鐜敓鎴愪唬鐮佹椂錛屽繀欏誨皬蹇冪考緲鹼紝姝ユ涓鴻惀錛屼笉寰椾笉鎰熸叏錛屾鍎垮叓緇忚璦閲岄潰鐨勭被鍨嬬湡鏄ソ涓滆タ鍟娿?/div><br />鍏跺疄錛屾暟鎹被鍨嬪茍涓嶉噸瑕侊紝閲嶈鐨勬槸鏁版嵁涓婅兘澶熸敮鎸佺殑榪愮畻闆嗗悎浠ュ強榪欎簺榪愮畻鑳借繍鐢ㄧ殑鍦哄悎銆?br />濂戒簡錛屽洖鍒頒笂鏂囷紝鎴戜滑鐢╛ZPP_INC_N鎼炰簡10涓暟錛岄氳繃澶嶅埗綺樿創(chuàng)錛屽彲浠ユ妸N澧炲姞鍒?55銆傚疄闄呰繍鐢ㄤ腑錛屽畬鍏ㄨ凍澶熺敤浜嗐?br />#define _ZPP_INC_JOIN(_A, _B) _ZPP_INC_JOIN_IMP1(_A, _B)<br />#define _ZPP_INC_JOIN_IMP1(_A, _B) _ZPP_INC_JOIN_IMP2(~, _A##_B)<br />#define _ZPP_INC_JOIN_IMP2(p, res) res<br /><br />#define PP_INC(x, ) _ZPP_INC_JOIN(_ZPP_INC_, x)<br />#define _ZPP_INC_0         1<br />#define _ZPP_INC_1         2<br />#define _ZPP_INC_2         3<br />#define _ZPP_INC_3         4<br />#define _ZPP_INC_4         5<br />#define _ZPP_INC_5         6<br />#define _ZPP_INC_6         7<br />#define _ZPP_INC_7         8<br />#define _ZPP_INC_8         9<br />#define _ZPP_INC_9         10<br />...<br />#define _ZPP_INC_255       256<br /><br />鍚屾牱鐨勬柟寮忥紝鍐嶅娉曟場鍒禤P_DEC錛屼粠256寮濮嬶紝涓鐩撮掑噺鍒?涓烘銆傚浜庡ぇ浜?56鐨勬暟錛屽氨涓嶆敮鎸佷簡錛岄偅灝遍兘鏄湭瀹氫箟鎿嶄綔銆傝繖鏍峰瓙錛岄氳繃PP_INC(n)錛屽氨寰楀埌n+1錛涜孭P_DEC(n)錛屽垯鏄痭-1銆傛瘮濡侾P_INC(PP_DEC(9))錛屽叾緇撴灉鑲畾鏄?浜嗐傚緢濂斤紝榪欐牱瀛愶紝鍦ㄩ澶勭悊涓氨瀹炵幇浜嗚嚜鐒舵暟鑷1鍜岃嚜鍑?鐨勮繍綆椾簡銆傚彟澶栵紝瀵逛簬澶т簬256鐨勬暟錛屾瘮濡?12浼犻掔粰PP_INC錛屽氨鍙緱鍒頒竴涓猒ZPP_INC_512鐨勭鍙鳳紝瀹屽叏娌℃湁浠諱綍鎰忎箟銆?br /><br />鐒跺悗錛屼袱涓嚜鐒舵暟鏄惁鐩哥瓑鐨勫垽鏂紝涔熼潪甯擱噸瑕侊紝蹇呴』鏀寔銆備絾鏄紝鍦ㄦ涔嬪墠錛岃瀹炵幇涓涓畯鍑芥暟PP_NOT錛岀敤鏉ュ垽鏂叆鍙傛槸鍚︿負0銆備負0鐨勮瘽錛屽垯鍑芥暟榪斿洖1錛屽惁鍒欙紝灝辮繑鍥?銆備篃鍗蟲槸錛?br />PP_NOT(0) == 1<br />PP_NOT(23) == 0錛屾垨鑰?PP_NOT(var) == 0銆?br />璁頒綇錛岄澶勭悊鎻愪緵緇欐垜浠殑鍘熺敓綾誨瀷灝卞彧鏈夌鍙峰拰##騫舵帴榪愮畻錛岄櫎姝や箣澶栵紝鍒棤浠栫墿銆傚ソ鍍忓伐鍏峰お綆闄嬶紝鑳藉畬鎴愮洰鐨勫悧錛熶笉寰椾笉浣╂湇鏈変簺鐮佺尶鐨勮剳媧炪備互涓嬩唬鐮佹槸榪欐牱榪愪綔鐨勶紝鍋囪PP_NOT鐢熸垚浠ヤ笅鐨勮皟鐢ㄥ艦寮忥紝鍏堜笉綆P_ARG1錛岃嚦浜庣鍙穨錛屾槸榪欐牱瀛愮殑錛屽彲浠ョ湅鎴愭櫘閫氱殑鍙橀噺鍚嶅瓧錛屽畠?yōu)鏄崰浣嵔W︼紝鍥犱負棰勫鐞嗗彧璇嗗埆閫楀彿(,)錛屽拰灝忔嫭鍙鳳紝鑷充簬鍏朵粬絎﹀彿錛屽畬鍏ㄦ棤瑙嗭紝閭d簺鏄疌/C++緙栬瘧闃舵鎵嶅叧蹇冪殑絎﹀彿銆?br />PP_NOT(0) = PP_ARG1(~, 1, 0)<br />PP_NOT(n) = PP_ARG1(_ZPP_NOT_n, 0)<br />鐒跺悗錛岃PP_ARG1鍙栫浜屼釜鍙傛暟錛堢爜鐚跨殑璁℃暟鏄粠0寮濮嬬殑錛屼篃鍗蟲槸錛?鍗蟲槸1錛?鍗蟲槸2錛夛紝灝卞畬鎴愪換鍔′簡銆傝嚦浜巁ZPP_NOT_n鏄粈涔堥錛岄偅涓彧鏄腑闂寸敓鎴愮殑涓存椂絎﹀彿錛屽彲浠ヨ垗寮冦傛垜浠彧闇瀵筥ZPP_NOT_0鍋氱壒鍒鐞嗐傚洜姝わ紝浠g爜鍙互榪欐牱鍐欎簡銆侾P_PROBE()鐢ㄤ互鐢熸垚涓や釜鍏ュ弬<br />#define PP_PROBE() ~, 1<br />#define _ZPP_NOT_0 PP_PROBE()<br />#define PP_NOT(_X, ...) PP_IS(PP_JOIN(_ZPP_NOT_, _X))<br /># define PP_IS(...) PP_ARG1(__VA_ARGS__, 0)<br /><br />榪欐牱瀛愪箣鍚庯紝鏄劇劧PP_NOT(n)灝卞彲浠ュ彉鎴怭P_ARG1(_ZPP_NOT_n, 0)鐨勫艦寮忎簡銆侾P_NOT涓嶆槸鍙渶涓涓叆鍙傚悧錛熶負浣曞悗闈㈣繕瑕佸甫鐪佺暐鍙鳳紝綰補鏄負浜嗗悗闈㈠悇縐嶅彉鎬佺殑榪愮敤錛屽彇鎮(zhèn)︾紪璇戝櫒銆傚凡緇忕敤瀹忔潵鍐欎唬鐮佷簡錛屽氨涓嶅繀鍐嶉伒瀹堜粈涔堟竻瑙勬垝寰嬶紝鍙鑳藉畬鎴愪換鍔″氨琛屼簡銆?br /><br />鑷充簬PP_ARG1鐨勫疄鐜幫紝灝卞緢綆鍗曚簡錛屽涓嬫墍紺猴紝<br />#define PP_ARG0(_0, ...) _0<br />#define PP_ARG1(_0, _1, ...) _1<br />#define PP_ARG2(_0, _1, _2, ...) _2<br /><br />鐒跺悗閫氳繃涓ゆ鍙栧弽鐨勫嚱鏁幫紝鍐嶈ˉ涓婂嚱鏁癙P_BOOL錛屽鏋滃叆鍙?gt;0錛屽氨榪斿洖1錛屽惁鍒欒繑鍥?錛岀被浼間簬鏁村瀷鍒癰ool鐨勫己鍒剁被鍨嬭漿鎹€?br />#define PP_BOOL(_X, ...) PP_NOT(PP_NOT(_X))<br /><br />鏈変簡榪欎簺鐨勯摵鍨箣鍚庯紝瑕佹瘮杈冧袱涓嚜鐒舵暟鏄惁鐩哥瓑錛屽氨綆鍗曚簡銆傚叾瀹炴病浠涔堢縐樼殑錛屽氨鏄拡瀵逛粠0鍒?55錛岄噸澶?56涓互涓嬪艦寮忕殑#define璇彞錛?br />#define    _ZPP_0_EQUALS_0        PP_PROBE()<br />#define    _ZPP_1_EQUALS_1        PP_PROBE()<br />#define    _ZPP_2_EQUALS_2        PP_PROBE()<br />...<br />#define PP_EQUALS(x, y) PP_IS(PP_CONCAT4(_ZPP_, x, _EQUALS_, y))<br />PP_EQUALS灝辨槸灝嗗叆鍙傚茍鎺ユ垚_ZPP_x_EQUALS_y鐨勫艦寮忥紝鍙x鍜寉鐩稿悓錛屼篃鍗蟲槸璇達紝瀹冧滑鍦ㄤ笂闈㈢殑琛ㄦ牸涓紝閭d箞錛岄亾鐞嗗氨濡傚悓PP_NOT鐨勫疄鐜伴偅鏍鳳紝鏈鍚庣粨鏋滃氨鏄?浜嗐傚叾瀹烇紝棰勫鐞嗕腑娌℃湁鍒ゆ柇榪欑鐜╂剰錛屽彧鏈夎〃鏍鹼紝鍙湁騫舵帴錛屽彧鏈夋煡琛ㄣ傛墍璋撶殑鍥劇伒瀹屽錛岃鐧戒簡錛屾病鏈夌巹铏氱殑錛屽氨鏄緩琛紝鐒跺悗鏌ヨ〃銆傚鐩哥瓑姣旇緝鍙栧弽PP_NOT錛岃嚜鐒跺氨寰楀埌涓嶇浉絳夌殑鍒ゆ柇鍑芥暟銆?br />#define PP_UN_EQUALS(x, y) PP_NOT(PP_IS(PP_CONCAT4(_ZPP_, x, _EQUALS_, y)))<br />鍐嶆寤鴻〃錛屽氨鍙互寰楀埌bool榪愮畻鐨勫嚱鏁幫紝鎴栦笌<br />#define PP_OR(a,b) PP_CONCAT3(_ZPP_OR_, a, b)<br />#define _ZPP_OR_00 0<br />#define _ZPP_OR_01 1<br />#define _ZPP_OR_10 1<br />#define _ZPP_OR_11 1<br /><br />#define PP_AND(a,b) PP_CONCAT3(_ZPP_AND_, a, b)<br />#define _ZPP_AND_00 0<br />#define _ZPP_AND_01 0<br />#define _ZPP_AND_10 0<br />#define _ZPP_AND_11 1<br /><br />鍐嶅噯澶囦竴寮犺〃鏍鹼紝灝嗗瓧鑺傛槧灝勫埌8涓簩榪涘埗浣嶃?br />#define _ZPP_BINARY_0    (0, 0, 0, 0, 0, 0, 0, 0)<br />#define _ZPP_BINARY_1    (0, 0, 0, 0, 0, 0, 0, 1)<br />#define _ZPP_BINARY_2    (0, 0, 0, 0, 0, 0, 1, 0)<br />#define _ZPP_BINARY_3    (0, 0, 0, 0, 0, 0, 1, 1)<br />#define _ZPP_BINARY_4    (0, 0, 0, 0, 0, 1, 0, 0)<br />...<br />鐒跺悗閫氳繃妯℃嫙璁$畻鏈虹粍鎴愬師鐞嗛噷闈㈢殑鍔犲噺涔橀櫎鐨勫師鐞嗭紝灝卞彲浠ュ疄鐜板洓鍒欒繍綆椾簡銆傚浜嗭紝鏁翠釜棰勫鐞嗗簱鐨勪唬鐮侀兘鍦ㄥ帇緙╁寘涓婏紝鍔熻兘姣攂oost鐨勯澶勭悊搴撳己澶氫簡錛屼絾鏄唬鐮佸嵈灝戜簡寰堝錛屼篃瀹規(guī)槗鐞嗚В澶氫簡錛屾墍鏈変唬鐮佸湪vs涓嬮潰姝e父榪愯錛屽叾浠栧鉤鍙拌繕娌℃湁嫻嬭瘯銆備唬鐮佸寘錛?a href="/Files/huaxiazhihuo/preprocessor.rar" style="color: #3366ff;">/Files/huaxiazhihuo/preprocessor.rar</a></div><img src ="http://www.shnenglu.com/huaxiazhihuo/aggbug/215050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huaxiazhihuo/" target="_blank">鍗庡涔嬬伀</a> 2017-07-04 14:21 <a href="http://www.shnenglu.com/huaxiazhihuo/archive/2017/07/04/215050.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>棰勫鐞嗙殑鍥劇伒瀹屽涔嬪紩璦http://www.shnenglu.com/huaxiazhihuo/archive/2017/01/14/214594.html鍗庡涔嬬伀鍗庡涔嬬伀Sat, 14 Jan 2017 07:01:00 GMThttp://www.shnenglu.com/huaxiazhihuo/archive/2017/01/14/214594.htmlhttp://www.shnenglu.com/huaxiazhihuo/comments/214594.htmlhttp://www.shnenglu.com/huaxiazhihuo/archive/2017/01/14/214594.html#Feedback0http://www.shnenglu.com/huaxiazhihuo/comments/commentRss/214594.htmlhttp://www.shnenglu.com/huaxiazhihuo/services/trackbacks/214594.html濂戒箙娌℃湁鍏夐【cppblog浜嗭紝鐜板湪榪欓噷榪欎箞鍐鋒竻浜嗭紝涓嶅厤璁╀漢鏈変簺浼ゆ劅錛屽彲瑙乧++鐜板湪澶氫箞鐨勪笉寰椾漢蹇冿紝涔熷彲鑳芥槸c++鐨勫ぇ紲炲幓浜嗗叾浠栫殑緗戠粶騫沖彴錛屽ソ姣旂煡涔庛備笉綆℃庝箞鏍鳳紝濮嬬粓瀵筩++榪樻槸鏈変簺鎰熸儏錛屼篃瀵筩ppblog鏈変簺鎰熸儏銆?br />
鎴戜滑榪樻槸鏉ヨ璁篶++鍚э紝榪欏嚑騫村湪c++閲岄潰鐜╀唬鐮佽嚜鍔ㄧ敓鎴愭妧鏈紝鑰岄澶勭悊鏄笉鍙伩鍏嶏紝涔熸槸涓嶅彲鎴栫己鐨勯噸瑕佸伐鍏楓傝櫧鐒禸oost pp棰勫鐞嗗簱鍦ㄥ畯鐨勮繍鐢ㄤ笂寰堟槸瀹屽杽錛屼絾鏄唬鐮佷篃澶浜嗭紝鑰屼笖浠g爜寰堜笉濂界悊瑙o紝瀵規(guī)錛屼笉鍏嶈浜虹枒鎯戯紝鏈夊繀瑕佹悶寰楅偅涔堝鏉傦紝鎼為偅涔堝浠g爜鍚楋紵騫朵笖錛岀湅浜哹oostpp鐨勪嬌鐢ㄦ帴鍙e悗錛屾劅瑙夊啓寰楀緢涓嶅共鍑錛屼篃涓嶅ソ緇勫悎銆傚洜姝わ紝閲嶆柊鍋氫簡涓濂楅澶勭悊鐨勮疆瀛愩備互涓嬬殑浠g爜錛屽亣璁懼湪msvc2013浠ヤ笂鐨勭増鏈繍琛岋紝鍙嶆寰堝浜虹敤MSVC鐨勶紝瑁呴肩殑鑷綋鍒錛岄犲嚭鏉ョ殑杞瓙錛屽懼悜浜庡厛鏀寔msvc銆?br />
棣栧厛錛屾垜浠畾涔変竴涓畯錛岀敤鏉ョ粰鎶婂叆鍙傚彉鎴愬瓧絎︿覆錛屽挦錛岃繖涓簨鎯呬篃澶猠asy浜嗭紝浣嗘槸錛屽湪姝わ紝鎰熻錛岃繕鏄湁蹇呰搴熻瘽澶氳В閲婁竴涓嬨備互涓嬩唬鐮佹儻渚嬮兘鏄紝鎵鏈夊彲鐢ㄧ殑瀹忓嚱鏁伴兘鏄互PP寮澶村叏閮ㄥぇ鍐欙紝鑰屼互_ZPP寮澶寸殑鍏ㄩ儴閮芥槸鍐呴儴瀹炵幇錛屽叾瀹炶繕鍙互鍋氬緱鏇撮毦鐪嬩竴鐐廣傚洜涓哄畯鍑芥暟鏄叏灞鐨勶紝娌℃湁浣滅敤鍩熺殑姒傚康錛屽茍涓斿彧鏄崟綰殑鏂囨湰鏇挎崲錛屾鐨勬椂鍊欙紝榪樹笉鐭ラ亾鎬庝箞姝伙紝鎵浠ワ紝蹇呴』璋ㄦ厧瀵瑰緟銆傚儚鏄痺indows.h澶存枃浠墮偅鏍鳳紝鐩存帴鐢╩in錛宮ax浣滀負瀹忕殑鍚嶅瓧錛岃櫧鐒剁敤璧鋒潵寰堟柟渚匡紝浣嗕篃涓嶇煡閬撳埗閫犱簡澶氬皯楹葷儲錛屾墍浠ワ紝寰堝鏃跺欙紝鍖呭惈windows.h鏃訛紝絎竴浠朵簨鎯呭氨鏄痷ndef min鍜宮ax銆?br />
浠ヤ笅鐨勪唬鐮侊紝鍙互闅忎究鍦ㄦ煇涓伐紼嬩笅錛岄殢渚垮緩绔嬩竴涓猚pp鍚庣紑鍚嶇殑婧愭枃浠訛紝鐒跺悗鎸塁TRL+F7緙栬瘧錛屼笉闇瑕丗5錛屽氨鍙互鐪嬪埌榪愯鐨勬晥鏋滐紝濡傛灉緙栬瘧閫氳繃錛屽氨璇存槑瀹忓熀鏈笂姝g‘錛屾祴璇曚唬鐮佽秺澶氾紝鍑嗙‘鎬у氨瓚婇珮銆傚綋鐒訛紝浣犱滑涔熷彲浠ラ氳繃璁劇疆婧愭枃浠剁殑灞炴э紝璁﹎svc鐢熸垚棰勫鐞嗗悗鐨勬枃浠訛紝鐒跺悗鐢ㄨ浜嬫湰鎵撳紑閭d釜鏂囦歡瑙傜湅銆?br />
#define PP_TEXT(str) _ZPP_TEXT(str)
#define _ZPP_TEXT(str) #str
鍦╟++棰勫鐞嗗畯涓紝鎿嶄綔絎?鏄皢鍚庨潰璺熼殢鐨勮〃杈懼紡鍔犱笂涓や釜鍙屽紩鍙鳳紝涔熷氨鏄瓧絎︿覆銆侾P_TEXT(str)涓嶆槸鐩存帴瀹氫箟鎴?str錛岃屾槸閫氳繃璋冪敤_ZPP_TEXT(str)錛岀劧鍚庡湪閭i噷鎵嶅皢鍏ュ弬鍙樻垚瀛楃涓詫紝鏄懼緱鏈夌偣杈楄漿錛屾湁鐐瑰姝や竴涓撅紝浣嗭紝鍏跺疄鏄負浜嗘敮鎸佸畯鐨勫叏鏂逛綅灞曞紑錛屼篃灝辨槸鍏ュ弬str鏈韓涔熷瓨鍦ㄥ畯璋冪敤鐨勬椂鍊欙紝綰睘鏃犲銆傛瘮濡傦紝濡傛灉榪欐牱瀹炵幇
#define PP_TEXT(str) #str
閭d箞錛屽浜庝笅闈㈢殑鎯呭喌錛?br />
#define AAA aaa
PP_TEXT(AAA)錛岀粨鏋滃皢鏄?AAA",鑰屼笉鏄?aaa"銆傚洜涓哄畯鎿嶄綔絎︾洿鎺ユ槸灝嗗叆鍙傚彉鎴愬瓧絎︿覆錛屾病鏈夎鍏ュ弬鏈変竴鐐圭偣鍥炴棆鐨勭┖闂達紝鎵浠ュ彧濂藉紩鍏ラ棿鎺ュ眰錛岃鍏ュ弬鏈夋満浼氬畯灞曞紑銆傚悗闈紝寰堝瀹忓嚱鏁伴兘鏄繖鏍峰疄鐜幫紝涓嶅緱涓嶉棿鎺ヨ皟鐢紝浠ヤ究璁╁畯鍏ㄩ潰灞曞紑銆傝宮svc鐨勫畯灞曞紑鏈哄埗鏇村姞濂囪懇錛屾洿鍔犱笉浜烘у寲錛屽叾闂存帴璋冪敤鐨勫艦寮忎篃鏇翠笐闄嬨傝繖閮芥槸娌″姙娉曠殑浜嬫儏銆?br />鐒跺悗錛屼負浜嗚皟璇曞畯錛屾垨鑰呮祴璇曞畯錛屽綋鐒訛紝寰堝鏃跺欙紝璋冭瘯瀹忥紝榪樻槸瑕佹墦寮棰勫鐞嗙殑鏂囦歡鏉ュ姣斿垎鏋愩傛垜浠 static_assert浣滀竴鐐圭偣鍖呰錛屽洜涓簊tatic_assert闇瑕佷袱涓弬鏁幫紝c++11鍚庨潰鐨刢++鐗堟湰涓紝static_assert濂藉儚鍙渶瑕佷竴涓叆鍙傦紝閭f椂灝變笉闇瑕佽繖涓寘瑁呬簡銆?br />
#define PP_ASSERT() static_assert((__VA_ARGS__), PP_TEXT(__VA_ARGS__));
PP_ASSERT(...)閲岄潰鐨勪笁涓偣錛屾槸涓嶅畾鍙傛暟鐨勫畯錛岃宊_VA_ARGS__灝變唬琛ㄤ簡...鎵鍖歸厤鐨勬墍鏈夊弬鏁幫紝榪欐潯璇硶寰堥噸瑕侊紝瑕佺啛緇冦傝繖閲岋紝灝變笉璇︾粏瑙i噴鍏剁敤娉曚簡錛屽悗闈細鏈夊ぇ鎶婂ぇ鎶婄殑瀹忓嚱鏁扮敤鍒癬_VA_ARGS__銆?br />濂戒簡錛屾垜浠彲浠ュ紑濮嬬敤PP_ASSERT(...)鍋氭祴璇曚簡銆?br />
PP_ASSERT(2+3==5)
濡傛灉錛岀劧鍚庣紪璇戣繖涓枃浠訛紝鍙戠幇緙栬瘧閫氳繃浜嗭紝姣斿
PP_ASSERT(2+3==4)
緙栬瘧鐨勬椂鍊欙紝灝變細鎶ラ敊璇俊鎭紝error C2338: 2+3==4
濂戒簡錛屾祴璇曞噯澶囧緩绔嬭搗鏉ワ紝灝卞彲浠ュ紑濮嬭倖鏃犲繉鎯殑鍐欎唬鐮佷簡銆備竴姝ヤ竴姝ュ湴鏋勫緩c棰勫鐞嗗畯鐨勫浘鐏靛畬澶囥?br />鏄劇劧錛屽綋鍔′箣鎬ワ紝鏈鏍規(guī)湰鐨勫畯灝辨槸灝嗕袱涓畯鍙傛暟鐨勫茍鎺ワ紝涔熷嵆鏄?#榪愮畻絎︼紝鏄劇劧濂芥瘮#榪愮畻閭f牱瀛愶紝蹇呴』緇欓噷闈㈠弬鏁版湁瀹忓睍寮鐨勬満浼氾紝鍥犳瑕侀棿鎺ヨ皟鐢紝涓嬮潰鏄叾瀹炵幇
#define PP_JOIN(_A, _B) _ZPP_JOIN_I(_A, _B)
#define _ZPP_JOIN_I(_A, _B) _ZPP_JOIN_II(~, _A##_B)
#define _ZPP_JOIN_II(p, res) res
绔熺劧涓嶆涓灞傞棿鎺ワ紝鑰屾槸涓ゅ眰錛屽張澶氭涓涓撅紝鏄洜涓哄彂鐜板湪鍋氬畯閫掑綊鐨勬椂鍊欙紝涓灞傞棿鎺ヨ皟鐢ㄨ繕涓嶈兘璁╁畯鍏呭垎鍦板睍寮錛屾墍浠ュ彧濂藉張鍔犻棿鎺ュ眰錛屼篃涓嶆槑鐧芥槸浣曞師鍥狅紝涔熸噿寰楄拷絀朵簡銆傜幇鍦紝鎺ヤ笅鏉ワ紝褰撶劧鏄祴璇昉P_JOIN浜嗐傚悇浣嶅悓瀛︼紝鍙互鏂板緩绔嬩竴涓祴璇曟枃浠訛紝閭d釜鏂囦歡include鎴戜滑鐨勮繖涓畯鍑芥暟銆傚綋鐒訛紝涔熷彲浠ュ湪鍚屼竴涓枃浠墮噷闈㈠啓嫻嬭瘯浠g爜錛屾敞鎰忓垎鎴愪袱孌典唬鐮侊紝涓婁竴孌靛啓瀹忓嚱鏁幫紝涓嬩竴孌靛啓嫻嬭瘯浠g爜錛岀洰鍓嶆潵鐪嬶紝閮藉彲浠ョ殑錛屽悗闈㈠啀鏁寸悊銆?br />
PP_ASSERT(PP_JOIN(1+2== 3))
#define A 20
#define B 10
PP_ASSERT(PP_JOIN(A 
+ B, == 30))
鏈変簡PP_JOIN錛屽氨鍙互寮濮嬪仛鐐瑰叾浠栦簨鎯呬簡銆傛瘮濡傦紝璁℃暟鍣紝
#define _ZPP_INC_JOIN(_A, _B) _ZPP_INC_JOIN_IMP1(_A, _B)
#define _ZPP_INC_JOIN_IMP1(_A, _B) _ZPP_INC_JOIN_IMP2(~, _A##_B)
#define _ZPP_INC_JOIN_IMP2(p, res) res

#define PP_INC(x, ) _ZPP_INC_JOIN(_ZPP_INC_, x)
#define _ZPP_INC_0         1
#define _ZPP_INC_1         2
#define _ZPP_INC_2         3
#define _ZPP_INC_3         4
#define _ZPP_INC_4         5
#define _ZPP_INC_5         6
#define _ZPP_INC_6         7
#define _ZPP_INC_7         8
#define _ZPP_INC_8         9
#define _ZPP_INC_9         10
榪欓噷錛屾垜浠噸鏂板張瀹炵幇浜嗕竴閬峆P_JOIN錛岃繖涔熸槸娌″姙娉曠殑浜嬫儏錛屽悗闈㈠湪閲嶉噸宓屽鐨勬椂鍊欙紝浼氬嚭鐜癙P_JOIN閲岄潰鍙堝寘鍚玃P_JOIN鐨勬儏鍐碉紝榪欐牱浼氬鑷村畯鍋滄灞曞紑浜嗭紝鎵浠ワ紝鍙ソ瀵逛簬姣忎竴涓鐢ㄥ埌JOIN涔嬪錛岄兘鐢ㄨ嚜宸辯増鏈殑JOIN銆?br />榪欐槸瀹忓嚱鏁扮殑瀹炵幇鏂瑰紡錛岄氳繃騫舵帴錛屾枃鏈浛鎹紝涓涓鏋氫婦錛屾墠杈懼埌榪欐牱鐨勬晥鏋滐紝涔熷氨鏄錛屾垜浠氳繃JOIN鍑芥暟錛屽湪瀹忛噷闈㈡瀯閫犱簡涓涓鏁板櫒鐨勬暟鎹被鍨嬨傚鏋滄瘡涓畯鍑芥暟閮借繖鏍峰啓錛屽矀涓嶆槸寰堢瘡銆傚ソ娑堟伅鏄紝鍙渶鐢ㄨ繖縐嶈嫤閫兼柟寮忓疄鐜板嚑涓渶鍩烘湰鐨勫嚱鏁幫紝鐒跺悗閫氳繃瀹忕殑閫掑綊寮曟搸錛屽叾浠栫殑瀹忓嚱鏁板氨涓嶉渶榪欐牱瀛愪竴涓竴涓嫤閫肩殑騫舵帴鏇挎崲浜嗐?br />
PP_ASSERT(PP_INC(9)==10)
PP_ASSERT(PP_INC(PP_INC(
9)) == 11)
鍐欐祴璇曚唬鐮佷範鎯簡錛屽啓璧鋒潵灝卞緢鏈夋剰鎬濅簡錛屾祴璇曢氳繃錛屼篃鏄渶嬋鍔ㄤ漢蹇冪殑鏃跺埢銆?br />鎺ヤ笅鏉ワ紝瑕佸鐞唌svc閲岄潰瀹忕殑鎭跺績琛屼負錛岀劧鍚庡氨緇撴潫鏈紩璦銆?br />
#define PAIR_SECOND(x, y) y
PP_ASSERT(PAIR_SECOND(
1020== 20)
榪欐牱瀛愶紝榪樹笉閿欙紝涓嬮潰錛屽啀define涓涓畯鍑芥暟錛岃鍏惰繑鍥炰竴涓猵air錛屼篃灝辨槸涓や釜鍊?br />
#define MAKE_PAIR(x, y) x, y
鐒跺悗錛岃繖鏍瘋皟鐢紝
PAIR_SECOND(MAKE_PAIR(1020))
緙栬瘧鍣ㄩ┈涓婂氨涓嶉珮鍏翠簡錛寃arning C4003: “PAIR_SECOND”瀹忕殑瀹炲弬涓嶈凍
濂藉儚鏄紪璇戝櫒娌℃湁鍏堝睍寮MAKE_PAIR(10, 20)錛岀劧鍚庡啀璋冪敤PAIR_SECOND錛岃屾槸鐩存帴鎶奙AKE_PAIR(10, 20)鏁翠釜褰撴垚涓涓嚱鏁頒紶緇橮AIR_SECOND錛岀劧鍚庯紝PAIR_SECOND灝辨彁紺哄疄鍙備笉瓚籌紝鐒跺悗錛岀‖瑕佹祴璇曪紝
PP_ASSERT(PAIR_SECOND(MAKE_PAIR(1020)) == 20)
鏄劇劧錛屾棤璁哄浣曪紝緙栬瘧鍣ㄥ娍蹇呭氨榫欓澶ф掍簡銆傚姝わ紝鎴戜滑鍙ソ鍐嶅紩鍏ラ棿鎺ュ眰錛屾兂鍔炴硶璁㎝AKE_PAIR(10, 20)鍏堝睍寮錛岀劧鍚庡啀浼犵粰PAIR_SECOND銆傝繖鏍鳳紝灝變笉鑳界洿鎺ョ敤榪欐牱鐨勫艦寮忎簡錛孭AIR_SECOND(MAKE_PAIR(10, 20)) 銆傚彧濂芥敼鎴愯繖鏍鳳紝涓嬮潰鐨勫嚑琛屼唬鐮侊紝寰堟湁鐐規(guī)儕澶╁湴娉i紲炵殑鍛抽亾銆?br />
#define _ZPP_INVOKE_JOIN(_A, _B) _ZPP_IMP_INVOKE_JOIN_I(_A, _B)
#define _ZPP_IMP_INVOKE_JOIN_I(_A, _B) _ZPP_IMP_INVOKE_JOIN_II(~, _A##_B)
#define _ZPP_IMP_INVOKE_JOIN_II(p, res) res

#define PP_INVOKE(m, args, ) _ZPP_INVOKE_JOIN(m, args)
鍓嶉潰鍑犺浠g爜閮芥槸PP_INVOKE鐨凧OIN鍑芥暟瀹炵幇錛屽彲浠ョ洿鎺ュ綋瀹冧滑鏄疛OIN鍑芥暟錛屽叧閿槸PP_INVOKE(m, args, ...)榪欓噷錛岀涓涓弬鏁癿鏄畯鍑芥暟錛岀浜屼釜鏄痑rgs錛屾槸瑕佷紶緇欑涓涓弬鏁癿鐨勫弬鏁板垪琛紝鐢ㄦ嫭鍙鋒嫭璧鋒潵錛岃嚦浜庡悗闈㈢殑鐪佺暐鍙鳳紝鏄湁浜涙椂鍊欎負浜嗗彇鎮(zhèn)︾紪璇戝櫒鑰屾坊鍔犵殑錛屼篃涓嶇煡閬撴槸浠涔堝師鍥狅紝鍙嶆榪欐牱瀛愬氨鍙互浜嗭紝鎳掑緱榪界┒銆傚瀮鍦懼畯錛屽瀮鍦鵑澶勭悊錛屽彧瑕佽兘瀹屾垚鍔熻兘灝辮浜嗭紝c++涓紝浠g爜鐢熸垚浠g爜錛岄噸澶存垙鍦╰mp閭i噷錛屽畯鍙槸灝忓皬蹇呰鐨勮緟鍔╁伐鍏瘋屽凡銆傜劧鍚庯紝榪欐牱璋冪敤錛?br />PP_ASSERT(PP_INVOKE(PAIR_SECOND, (MAKE_PAIR(10, 20))) == 20)
緙栬瘧閫氳繃浜嗭紝濂戒笉瀹規(guī)槗鍟婏紒

]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲男女自偷自拍图片另类| 91久久久一线二线三线品牌| 欧美精品一区二区在线播放| 久久成人18免费网站| 欧美成人激情视频| 久久久午夜电影| 国产精品区免费视频| 亚洲国产精品成人精品| 激情综合激情| 亚洲综合电影| 亚洲欧美综合精品久久成人| 欧美成人午夜剧场免费观看| 久久久精品动漫| 国产精品人人做人人爽人人添| 亚洲国产精品电影| 亚洲国产精品黑人久久久 | 亚洲日韩视频| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲网站在线| 亚洲深夜福利在线| 欧美日韩一区二区三区四区五区| 欧美电影在线观看完整版| 国产一区二区高清| 午夜精品影院| 久久精品国产在热久久| 国产精品久久久久久久久久妞妞 | 亚洲韩国精品一区| 在线视频精品一| 国产一区二区三区黄| 国产精品久久久久秋霞鲁丝| 久久久999精品视频| 亚洲欧美中文日韩在线| 最新国产乱人伦偷精品免费网站 | 亚洲影院色无极综合| 卡一卡二国产精品| 久久精品亚洲| 久久精品五月| 久热综合在线亚洲精品| 蜜桃久久av一区| 99re6这里只有精品视频在线观看| 国产精品jizz在线观看美国 | 久久精品视频99| 欧美区在线播放| 亚洲主播在线播放| 亚洲一区精品电影| 亚洲欧美日韩国产综合精品二区| 欧美日韩在线观看一区二区| 欧美成人免费大片| 艳妇臀荡乳欲伦亚洲一区| 欧美精品网站| 亚洲网址在线| 亚洲国内高清视频| 国产一区二区三区在线观看网站| 国产精品久久77777| 欧美久久久久中文字幕| 久久躁日日躁aaaaxxxx| 性久久久久久久| 性欧美暴力猛交另类hd| 亚洲欧美日本视频在线观看| 久久天天狠狠| 最近中文字幕mv在线一区二区三区四区| 欧美激情亚洲激情| 欧美va天堂在线| 亚洲精品欧美精品| 久久精品国产综合| 在线视频国产日韩| 欧美日韩精品在线视频| 亚洲自拍另类| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美高清在线视频| 国产精品99久久99久久久二8 | 欧美在线精品免播放器视频| 好看的av在线不卡观看| 美女国内精品自产拍在线播放| 亚洲天堂av图片| 久久伊人一区二区| 亚洲新中文字幕| 尤物精品在线| 国产精品有限公司| 欧美ed2k| 欧美与黑人午夜性猛交久久久| 欧美激情亚洲激情| 久久久久国产精品厨房| 99综合在线| 亚洲国产精品www| 国产精品国产三级国产a| 久久中文字幕一区二区三区| 这里只有精品视频| 亚洲国产第一| 久久午夜精品一区二区| 亚洲香蕉视频| 亚洲狼人综合| 国产欧美日本一区视频| 国产精品福利片| 久久久www| 欧美中文字幕视频| 亚洲天堂av综合网| 中文精品99久久国产香蕉| 欧美99在线视频观看| 久久裸体视频| 午夜视频在线观看一区| 亚洲欧美日韩一区在线| 亚洲人成人一区二区在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品久久久久久福利一牛影视| 欧美粗暴jizz性欧美20| 久久久久国内| 午夜欧美大尺度福利影院在线看 | 亚洲品质自拍| 亚洲大片av| 欧美成年人视频网站| 久久综合一区| 久久免费精品日本久久中文字幕| 欧美一级成年大片在线观看| 中日韩美女免费视频网站在线观看| 亚洲免费不卡| 91久久黄色| 夜夜嗨av一区二区三区四季av | 国产网站欧美日韩免费精品在线观看 | 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲综合电影一区二区三区| 日韩性生活视频| 一区二区三区精密机械公司| 亚洲国产婷婷香蕉久久久久久99| 免费成人网www| 男女视频一区二区| 亚洲一区二区视频| 午夜视频在线观看一区| 亚洲综合社区| 久久久久久高潮国产精品视| 欧美一级片久久久久久久| 久久精品视频免费| 欧美日韩精品免费观看| 亚洲国产高清自拍| 先锋影音久久| 亚洲免费小视频| 久久精品国产一区二区三区| 欧美一区二视频在线免费观看| 亚洲在线一区二区| 欧美怡红院视频| 欧美成人xxx| 亚洲精品123区| 日韩亚洲精品电影| 亚洲一区二区三区在线观看视频| 亚洲在线视频| 欧美一区在线看| 久久精品成人欧美大片古装| 欧美专区在线观看一区| 欧美韩日视频| 国产精品免费看片| 亚洲韩国青草视频| 亚洲一区尤物| 欧美刺激午夜性久久久久久久| 亚洲激情午夜| 欧美在线播放一区| 欧美大片免费观看在线观看网站推荐 | 老司机午夜免费精品视频| 欧美大色视频| 亚洲一级在线| 久热精品在线| 国产色产综合色产在线视频| 在线日本欧美| 久久精品99国产精品日本| 欧美成人影音| 久久国产精品亚洲77777| 欧美日韩一区二区在线观看视频| 国产乱码精品1区2区3区| 亚洲精品一区中文| 久久久久免费观看| 正在播放亚洲一区| 米奇777超碰欧美日韩亚洲| 国产精品亚洲综合久久| 亚洲精品久久久久中文字幕欢迎你| 久久国产精品72免费观看| 亚洲娇小video精品| 久久久久久亚洲精品中文字幕| 欧美日韩综合在线免费观看| 亚洲人成在线观看网站高清| 新67194成人永久网站| 99re这里只有精品6| 久久―日本道色综合久久| 国产亚洲精久久久久久| 宅男在线国产精品| 亚洲精品乱码久久久久久日本蜜臀| 性色av一区二区三区在线观看| 欧美日韩理论| 亚洲国产另类久久精品| 欧美成人久久| 欧美在线免费观看视频| 国产日韩欧美日韩大片| 亚洲天堂网在线观看| 99精品国产在热久久下载| 欧美一区二区三区四区高清| 国产欧美日韩视频| 小处雏高清一区二区三区| 99视频日韩| 国产精品乱码一区二区三区| 宅男噜噜噜66一区二区| 夜夜精品视频一区二区| 欧美日韩另类丝袜其他|