锘??xml version="1.0" encoding="utf-8" standalone="yes"?>99精品国产综合久久久久五月天,一本伊大人香蕉久久网手机,亚洲а∨天堂久久精品9966http://www.shnenglu.com/Rich-cw/鎺㈢儲鏈煡zh-cnThu, 08 May 2025 19:55:50 GMTThu, 08 May 2025 19:55:50 GMT60to be continuehttp://www.shnenglu.com/Rich-cw/archive/2010/01/05/104864.html宕囨枃宕囨枃Tue, 05 Jan 2010 13:51:00 GMThttp://www.shnenglu.com/Rich-cw/archive/2010/01/05/104864.htmlhttp://www.shnenglu.com/Rich-cw/comments/104864.htmlhttp://www.shnenglu.com/Rich-cw/archive/2010/01/05/104864.html#Feedback0http://www.shnenglu.com/Rich-cw/comments/commentRss/104864.htmlhttp://www.shnenglu.com/Rich-cw/services/trackbacks/104864.html     榪垏鍦版兂瑕佸啓鐐逛粈涔堬紝鍗翠笉鐭ヤ粠浣曞紑澶淬傝繖浜涘ぉ鐪嬬殑涓滆タ寰堟潅錛岀湅銆奵++妯℃澘鍏冪紪紼嬨嬬湅寰楀ご澶э紝鐪嬨婃繁鍏ユ祬鍑篈TL銆嬭嫤浜庢棤娉曞疄璺碉紝鍋氶涔熸病蹇冩濓紝鍙堢籂緇撲簬蹇緇撹鐨勮冭瘯銆傜艦浜嗭紝闈欏績娼滀慨鎵嶆槸姝i亾銆備絾鎬誨緱鎻愮偧涓涓嬭繖娣蜂貢鐨勬濇兂錛屼笉鐒?#8220;鑴戦粍閲?#8221;灝辮闅忕潃“璞嗚厫娌?#8221;琚椂闂寸殑娼按鍐茶蛋浜嗐傚厛鎷熶釜棰樼洰錛屽緟鑰冭瘯涓瀹屽氨鏉ヨˉ涓娿?/p>

     鏉傞」錛歜oost mpl 涓殑榪唬鍣ㄣ佺畻娉曚笌鍏跺畠銆?/strong>

     棰樼洰鏈夌偣澶э紝鍙兘灝藉姏鐮旂┒婧愮爜錛屽敖閲忓鍐欍傚ソ錛岀洰鏍囧湪姝わ紝鐣欏緟鍐嶈銆?/p>

宕囨枃 2010-01-05 21:51 鍙戣〃璇勮
]]>
涓浜涘浘http://www.shnenglu.com/Rich-cw/archive/2009/12/30/104489.html宕囨枃宕囨枃Wed, 30 Dec 2009 13:19:00 GMThttp://www.shnenglu.com/Rich-cw/archive/2009/12/30/104489.htmlhttp://www.shnenglu.com/Rich-cw/comments/104489.htmlhttp://www.shnenglu.com/Rich-cw/archive/2009/12/30/104489.html#Feedback1http://www.shnenglu.com/Rich-cw/comments/commentRss/104489.htmlhttp://www.shnenglu.com/Rich-cw/services/trackbacks/104489.html










宕囨枃 2009-12-30 21:19 鍙戣〃璇勮
]]>
TopCoder 緇冧範棰樹箣鎺掑垪錛圥ermutation錛?/title><link>http://www.shnenglu.com/Rich-cw/archive/2009/12/19/103543.html</link><dc:creator>宕囨枃</dc:creator><author>宕囨枃</author><pubDate>Sat, 19 Dec 2009 12:53:00 GMT</pubDate><guid>http://www.shnenglu.com/Rich-cw/archive/2009/12/19/103543.html</guid><wfw:comment>http://www.shnenglu.com/Rich-cw/comments/103543.html</wfw:comment><comments>http://www.shnenglu.com/Rich-cw/archive/2009/12/19/103543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Rich-cw/comments/commentRss/103543.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Rich-cw/services/trackbacks/103543.html</trackback:ping><description><![CDATA[<p>     棰樼洰鍙婅В棰樼▼搴忕粰鍦ㄦ湯灝撅紝鍏堟潵鐪嬬湅鎺掑垪涓涓暟緇勭殑鏂規(guī)硶銆?/p> <p>     緇欏畾涓涓暟緇?array[] = {3, 1, 2, 4, 0}; 榪欎釜緇欏畾鐨勬暟緇勬湁鐩殑鎬э紝鍗沖畠絎﹀悎 n * m 鐨勮鍒欙紝榪欓噷鏄?5 * 5錛?涓厓绱狅紝5涓繛緇笖涓嶅悓鐨勫鹼級銆傛寜鎴戞兂鍒扮殑涓鑸殑鏂規(guī)硶錛屽氨鏄嬌鐢ㄥ驚鐜潵姹傚嚭鍚勭鎺掑垪鐨勫彲鑳斤紝浣嗚繖縐嶆柟娉曚笉鑳界‘淇濇瘡涓厓绱犲彧鍑虹幇涓嬈★紝涓旈殢鐫鍏冪礌涓暟鐨勫闀匡紝寰幆娣卞害灝嗗彉寰楀緢娣便傜戶緇兂涓嬪幓錛岃繖縐嶆柟娉曞皢浼氬彉寰楀緢澶嶆潅錛岃繖灝辮姹傛垜瀵繪壘鍙﹀涓縐嶆柟娉曘傛敞鎰忓埌姣忎釜鍏冪礌騫朵笉鐩稿悓錛岄偅涔堣浣垮悇涓厓绱犲湪姣忎釜浣嶇疆涓婂彧鍑虹幇涓嬈★紝寰堟槑鏄劇殑涓縐嶆柟娉曞氨鏄滃僵紲ㄦ満璇葷エ娉曗濄傛瘮濡傛暟鎹鍏ュ彛鍦ㄧ涓涓厓绱犵殑浣嶇疆錛岄偅涔堜緷嬈″驚鐜繖涓暟緇勶紝姣忔浣垮悗闈㈢殑鍏冪礌鍚戝墠縐誨姩涓浣嶏紝鍚勪釜鏁板瓧涓嶅氨閮借鍒頒簡鍚楋紝榪欏氨鍍忓湪鎵撳嵃鏈轟腑婊氬姩鐨勭焊銆傚叿浣撴楠ゅ涓嬶細</p> <p>31240<br>12403 <鈥攔otate <p>     絎竴浣嶅姝わ紝閭d箞鍚庨潰鐨勬瘡涓浣嶄篃濡傛錛屼篃灝辨槸閫掑綊鍦板鐞嗗悗闈㈢殑鏁板瓧錛屾瘡縐誨姩涓浣嶅氨浠ヤ笅涓浣嶄負璧風偣鍋氱浉鍚岀殑澶勭悊錛岀洿鍒版墍鏈夋暟瀛楀驚鐜簡涓閬嶏紝閭f帓鍒楃殑宸ヤ綔涔熷氨瀹屾垚浜嗐備竴涓叿浣撶殑瀹炵幇濡備笅錛?pre class="code"><span style="color: green">/* * @param r: 闇瑕佹眰鍏舵帓鍒楃殑鍚戦噺 * @param iPos: 褰撳墠鎵榪涜鍒扮殑浣嶇疆 * 紼嬪簭浣撲腑鐨勬敞閲婅〃紺哄浜庨偅涓綅緗殑鍚戦噺閮芥槸涓涓柊鐨勪笖鍞竴鐨勬帓鍒? */</span></pre><pre class="code"><span style="color: green"></span><span style="color: blue">void </span>rotate(vector<<span style="color: blue">int</span>>& r, <span style="color: blue">int </span>iPos) { <span style="color: blue">if</span>(iPos == r.size() - 1)<span style="color: green">//鏄惁寰幆瀹屾瘯錛岃皟鐢ㄥ嚱鏁版椂 iPos 緗? </span><span style="color: blue">return</span>; <span style="color: blue">int </span>iNextPos = iPos + 1; <span style="color: blue">for</span>(size_t i = iPos; i < r.size(); ++i) { <span style="color: blue">if</span>(i == 0) { <span style="color: green">//a different permutation, do something here </span>} <span style="color: blue">int </span>t = r[iPos]; <span style="color: blue">for</span>(size_t j = iPos; j < r.size() - 1; ++j)<span style="color: green">//寰幆鍓嶇Щ </span>r[j] = r[j + 1]; r[r.size() - 1] = t; <span style="color: blue">if</span>(i != r.size() - 1) { <span style="color: green">//a different permutation, do something here </span>} rotate(r, iNextPos);<span style="color: green">//浠庝笅涓浣嶆暟瀛楀紑濮嬫柊鐨勪綅縐? </span>} }</pre><a ></a><pre class="code"> 榪欑鏂規(guī)硶涓嶈姹傛暟瀛楀紡榪炵畫鐨勶紝涔熶笉鐢ㄤ簨鍏堣瀹氬ソ鍚戦噺鐨勯暱搴︺傚彧鏄綋鍚戦噺闀垮害鍒頒簡涓瀹氱殑鏃跺欙紝榪愮畻鏃墮棿浼氬緢闀匡紒鍏跺畠鏂規(guī)硶鏈煡鈥︹?/pre><pre class="code"> topcoder 涓婄殑緇冧範棰樺涓嬶細</pre> <p>Problem Statement <p>A permutation A[0], A[1], ..., A[N-1] is a sequence containing each integer between 0 and N-1, inclusive, exactly once. Each permutation A of length N has a corresponding child array B of the same length, where B is defined as follows:<br>B[0] = 0<br>B[i] = A[B[i-1]], for every i between 1 and N-1, inclusive.<br>A permutation is considered perfect if its child array is also a permutation.  Below are given all permutations for N=3 with their child arrays. Note that for two of these permutations ({1, 2, 0} and {2, 0, 1}) the child array is also a permutation, so these two permutations are perfect.<br>Permutation        Child array<br>{0, 1, 2}        {0, 0, 0}<br>{0, 2, 1}        {0, 0, 0}<br>{1, 0, 2}        {0, 1, 0}<br>{1, 2, 0}        {0, 1, 2}<br>{2, 0, 1}        {0, 2, 1}<br>{2, 1, 0}        {0, 2, 0}<br>You are given a vector <int> P containing a permutation of length N. Find a perfect permutation Q of the same length such that the difference between P and Q is as small as possible, and return this difference. The difference between P and Q is the number of indices i for which P[i] and Q[i] are different.<br>Definition <p>Class:<br>PerfectPermutation<br>Method:<br>reorder<br>Parameters:<br>vector <int><br>Returns:<br>int<br>Method signature:<br>int reorder(vector <int> P)<br>(be sure your method is public) <p>Constraints<br>-<br>P will contain between 1 and 50 elements, inclusive.<br>-<br>P will contain each integer between 0 and N-1, inclusive, exactly once, where N is the number of elements in P.<br>Examples <p>0)<br>{2, 0, 1}<br>Returns: 0<br>P is a perfect permutation, so we can use the same permutation for Q. The difference is then 0 because P and Q are the same. <p>1)<br>{2, 0, 1, 4, 3}<br>Returns: 2<br>Q might be {2, 0, 3, 4, 1}. <p>2)<br>{2, 3, 0, 1}<br>Returns: 2<br>Q might be {1, 3, 0, 2}. <p>3)<br>{0, 5, 3, 2, 1, 4}<br>Returns: 3 <p>4)<br>{4, 2, 6, 0, 3, 5, 9, 7, 8, 1}<br>Returns: 5 <p>This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.</p>    鎴戠殑瑙g瓟濡備笅錛?pre class="code"><span style="color: blue">#include </span><span style="color: #a31515"><iostream> </span><span style="color: blue">#include </span><span style="color: #a31515"><vector> </span><span style="color: blue">#include </span><span style="color: #a31515"><cstddef> </span><span style="color: blue">#include </span><span style="color: #a31515"><limits> </span><span style="color: blue">#include </span><span style="color: #a31515"><cassert> </span><span style="color: blue">#include </span><span style="color: #a31515"><boost\assign.hpp> </span><span style="color: green">// for vector += </span><span style="color: blue">using namespace </span>std; <span style="color: blue">class </span>PerfectPermutation { <span style="color: blue">public</span>: <span style="color: blue">int </span>reorder(<span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& P, vector<<span style="color: blue">int</span>>& result); <span style="color: blue">bool </span>isPerfect(<span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& P); <span style="color: blue">private</span>: <span style="color: blue">int </span>difference(<span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& P, <span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& Q); <span style="color: blue">void </span>rotate(<span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& src, vector<<span style="color: blue">int</span>>& r, <span style="color: blue">int </span>level, <span style="color: blue">int</span>& nMin, vector<<span style="color: blue">int</span>>& out); }; <span style="color: blue">int </span>PerfectPermutation::difference(<span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& P, <span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& Q) { size_t cDiff = P.size(); assert(cDiff == Q.size()); <span style="color: blue">for</span>(size_t i = 0; i < P.size(); ++i) { <span style="color: blue">if</span>(P[i] == Q[i]) cDiff--; } <span style="color: blue">return </span>cDiff; } <span style="color: blue">bool </span>PerfectPermutation::isPerfect(<span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& A) { <span style="color: blue">int </span>Bi = 0, Bi_1 = 0; vector<<span style="color: blue">bool</span>> vb(A.size()); vb[0] = <span style="color: blue">true</span>; <span style="color: blue">for</span>(size_t i = 1; i < A.size(); ++i) { <span style="color: blue">if</span>(vb[Bi = A[Bi_1]]) <span style="color: blue">return false</span>; <span style="color: blue">else </span>vb[Bi] = <span style="color: blue">true</span>; Bi_1 = Bi; } <span style="color: blue">return true</span>; } <span style="color: blue">void </span>PerfectPermutation::rotate(<span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& src, vector<<span style="color: blue">int</span>>& r, <span style="color: blue">int </span>level, <span style="color: blue">int</span>& nMin, vector<<span style="color: blue">int</span>>& out) { <span style="color: blue">if</span>(level == r.size() - 1) <span style="color: blue">return</span>; <span style="color: blue">int </span>in = level + 1; <span style="color: blue">for</span>(size_t i = level; i < r.size(); ++i) { <span style="color: blue">if</span>(i == 0 && isPerfect(r)) { nMin = min(difference(src, r), nMin); out = r; } <span style="color: blue">int </span>t = r[level]; <span style="color: blue">for</span>(size_t j = level; j < r.size() - 1; ++j) r[j] = r[j + 1]; r[r.size() - 1] = t; <span style="color: blue">if</span>((i != r.size() - 1) && isPerfect(r)) { nMin = min(difference(src, r), nMin); out = r; } rotate(src, r, in, nMin, out); } } <span style="color: blue">int </span>PerfectPermutation::reorder(<span style="color: blue">const </span>vector<<span style="color: blue">int</span>>& P, vector<<span style="color: blue">int</span>>& result) { <span style="color: blue">if</span>(P.size() == 1 || isPerfect(P)) <span style="color: blue">return </span>0; <span style="color: blue">int </span>nMin = numeric_limits<<span style="color: blue">int</span>>::max(); vector<<span style="color: blue">int</span>> Q(P); rotate(P, Q, 0, nMin, result); <span style="color: blue">return </span>nMin == numeric_limits<<span style="color: blue">int</span>>::max() ? -1 : nMin; } <span style="color: blue">int </span>main() { <span style="color: blue">using namespace </span>boost::assign; PerfectPermutation pp; vector<<span style="color: blue">int</span>> P; P += 2, 0, 1, 4, 3; vector<<span style="color: blue">int</span>> result(P.size()); cout << <span style="color: #a31515">"Is a perfect Permutation : " </span><< (pp.isPerfect(P) ? <span style="color: #a31515">"Yes" </span>: <span style="color: #a31515">"No"</span>) << endl; cout << <span style="color: #a31515">"Difference between before reorder and after : " </span><< pp.reorder(P, result) << endl; assert(pp.isPerfect(result)); cout << <span style="color: #a31515">"One answer might be : "</span>; <span style="color: blue">for</span>(size_t i = 0; i < result.size(); ++i) cout << result[i] << <span style="color: #a31515">" "</span>; cout << endl; <span style="color: blue">return </span>0; }</pre><a ></a><img src ="http://www.shnenglu.com/Rich-cw/aggbug/103543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Rich-cw/" target="_blank">宕囨枃</a> 2009-12-19 20:53 <a href="http://www.shnenglu.com/Rich-cw/archive/2009/12/19/103543.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鏁寸悊鍑犱釜offsethttp://www.shnenglu.com/Rich-cw/archive/2009/12/12/103059.html宕囨枃宕囨枃Sat, 12 Dec 2009 07:16:00 GMThttp://www.shnenglu.com/Rich-cw/archive/2009/12/12/103059.htmlhttp://www.shnenglu.com/Rich-cw/comments/103059.htmlhttp://www.shnenglu.com/Rich-cw/archive/2009/12/12/103059.html#Feedback0http://www.shnenglu.com/Rich-cw/comments/commentRss/103059.htmlhttp://www.shnenglu.com/Rich-cw/services/trackbacks/103059.html      榪欏嚑涓?offset 鏄細

      c 涓殑 offsetof 瀹忥紱

      銆奀OM鏈川璁恒? "inttable.h" 涓殑 BASE_OFFSET 錛?/p>

      鍜?This() (瀹冪敤鍒頒簡 offsetof錛屾潈涓斿綋鍋氭槸涓涓?packaged offset 鍚?銆?/p>

      鍏堝畾涔変竴浜涜緟鍔╃被錛?/p>

struct IX {
    virtual void fx() = 0;
};
struct IY {
    virtual void fy() = 0;
};
class CA : public IX,
           public IY {
public:
    virtual void fx() { cout << "CA::fx()" << endl; };
    virtual void fy() { cout << "CA::fy()" << endl; };

    struct Inner {
        CA* This() { return (CA*)((char*)this - offsetof(CA, m_inner)); }
    };
    Inner m_inner;
};

      鍏堢湅 offsetof 錛?/p>

#define offsetof(s,m)   (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))
    宸ヤ綔鍘熺悊澶т綋鍚屼笅鍥炬墍紺猴紝鍏跺煎氨鏄?a 鈥?0 = a 錛屽嵆 m 琚槧灝勫悗鐨勫湴鍧銆傛墍浠ヤ竴涓?鈥?gt; 鎿嶄綔灝卞彲浠ユ悶瀹氥?/pre>
offset 
    鍐嶇湅 BASE_OFFSET 錛?/pre>
#define BASE_OFFSET(ClassName, BaseName) \
    (DWORD(static_cast<BaseName*>(reinterpret_cast<ClassName*>(0x10000000))) - 0x10000000)

    瀵逛簬鍏堝墠鐨勫畾涔夛紝鏈夛細

DWORD disX = BASE_OFFSET(CA, IX);
DWORD disY = BASE_OFFSET(CA, IY);
cout << disX << endl    // 0
      
<< disY << endl;   // 4

    榪欎釜瀹忎富瑕佸埄鐢ㄤ簡媧劇敓綾繪寚閽堝埌鍩虹被鎸囬拡鐨勮漿鎹紝榪欎竴鍒囩敱璇█鍐呯疆鐨勮漿鎹㈢瀹屾垚銆傚湪 ATL 涓浉搴旂殑瀹氫箟鏄細

#define offsetofclass(base, derived) ((DWORD_PTR)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING)

    鍏朵腑 _ATL_PACKING 鐨勫間負 8 銆備負浠涔堜嬌鐢ㄨ繖涓や釜鍊煎憿錛屾垜涓嶇煡閬撱傜綉涓婃湁璇存槸涓轟簡閬垮厤 NULL 鎸囬拡鍜岃礋鍊鹼紝鎴戞殏鏃朵笉鑳藉鐞嗚В銆?/p>

    鏈鍚庢潵鐪?This() 錛?/p>

CA* This() { return (CA*)((BYTE*)this - offsetof(CA, Inner)); }
    This() 榪斿洖鐨勫嵆鏄寚鍚?CA 鐨勬寚閽堬紝濡傦細 ca.m_inner.This()->fx(); 鏈変簡涓婇潰涓や釜 offset 錛岃繖涓氨涓嶉毦鐞嗚В浜嗐?/pre>
    鏁寸悊瀹屾瘯銆?/pre>

宕囨枃 2009-12-12 15:16 鍙戣〃璇勮
]]>typedef 鍏抽敭瀛椾簩涓変簨http://www.shnenglu.com/Rich-cw/archive/2009/12/09/102864.html宕囨枃宕囨枃Wed, 09 Dec 2009 13:20:00 GMThttp://www.shnenglu.com/Rich-cw/archive/2009/12/09/102864.htmlhttp://www.shnenglu.com/Rich-cw/comments/102864.htmlhttp://www.shnenglu.com/Rich-cw/archive/2009/12/09/102864.html#Feedback0http://www.shnenglu.com/Rich-cw/comments/commentRss/102864.htmlhttp://www.shnenglu.com/Rich-cw/services/trackbacks/102864.html      璁板緱鍦ㄧ湅銆妛indows 鏍稿績緙栫▼銆嬬浜屽崄浜旂珷鐨?Spreadsheet 紺轟緥紼嬪簭鏃訛紝鎴戝鍏朵腑 typedef 鐨勭敤娉曞緢鏄洶鎯戙傚綋鏃剁炕鐪嬩簡銆夿ig c++銆嬶紙鎴戠殑絎竴鏈?c++ 涔︾睄錛夛紝寰堝彲鎯滐紝涓婇潰璁插緱寰堢畝鍗曪紝涓嶈凍浠ヨВ絳旀垜鐨勭枒鎯戙備笉鐭ヤ負浠涔堝綋鏃舵病鏈夊潥鎸佸幓瑙e喅閭d釜闂錛屼竴鐩村埌鐜板湪鎵嶆兂璧鋒潵瀵?typedef 鍋氫釜鍏ㄩ潰鐨勫洖欏俱係TL 鍜?BOOST 涓烘垜浠憟鐜頒簡浼楀綺懼僵鐨勫簲鐢紝typedef 鍔熶笉鍙病銆傚厛鐪嬬湅 銆奵++ primer銆?鎬庝箞璇寸殑錛?/p>

      Introduces a synonym for some other type. Form:

      涓烘煇縐嶇被鍨嬪紩鍏ュ悓涔夎瘝銆傛牸寮忥細

      typedef type synonym;
     

      defines synonym as another name for the type named type.

      瀹氫箟 synonym 涓哄悕涓?type 鐨勭被鍨嬬殑鍙︿竴鍚嶅瓧銆?/p>

      鍦ㄧ湅銆婃牳銆嬩竴涔︾殑鏃跺欙紝鎴戠殑浜嗚В灝辮繖涔堜竴鐐廣備負浠涔堟垜鐪嬩笉鎳傚憿錛熺湅鐪嬨婃牳銆嬩腑鐨勭敤娉曪細

const int g_nNumRows = 256;
const int g_nNumCols = 1024;

typedef struct {
    DWORD dwValue;
    BYTE  bDummy[1020];
} CELL, *PCELL;

typedef CELL SPREADSHEET[g_nNumRows][g_nNumCols];
typedef SPREADSHEET *PSPREADSHEET;
    鎸夌収褰撴椂鐨勬兂娉曪紝鍙ュ瓙 SPREADSHEET[g_nNumRows][g_nNumCols] sh 鐨勬剰鎬濆簲璇ユ槸 CELL sh 錛屼笉灝辮鏄繖鏍風殑鍚楋紙鍥犱負瀹冨彧鏄釜鍒悕/椹敳錛夛紵浣嗗湪鎴戦偅涓兂娉曢噷 sh 鍙笉鏄暟緇勶紝鎵浠ユ垜褰撴椂鏃犳硶鐞嗚В sh 鍚庢潵鐨勮涓恒傚艦寮忎富涔夛紝瀵癸紝褰㈠紡涓諱箟褰卞搷浜嗘垜錛屽綋鏃舵垜灝變竴褰誨簳鐨勫艦寮忎富涔夎呫傛垜榪樻兂鍐嶄竴閬嶅湴閲嶅榪欎釜璇嶏紝涓嶈繃閭d篃澶粰瀹冮潰瀛愪簡銆傜畻浜嗭紝 Not worth to fight!(鍝堬紝鏈榪戠湅鐨勪竴閮ㄧ簿褰╃殑瀹跺涵鍠滃墽涓殑鍙拌瘝銆傝繖閮ㄥ墽鍚嶅彨銆妕he middle銆?銆傘婃牳銆嬩竴涔︿腑鎺ヤ笅鏉ヨ繕鏈変竴涓簿褰╃殑鐢ㄦ硶錛屼負浜嗙畝鍖栦唬鐮侊紝鎴戞妸瀹冨啓鎴愯繖涓牱瀛愶細
class Base {
public:
    virtual ~Base();
    void fn();
    ...
private:
    int n;
};

class Derive : public Base {
    ...
    //no data member allow, just function here.
};
static Derive g_ssObject;
SPREADSHEET& g_ss = *(PSPREADSHEET)(PCELL)g_ssObject;
    濡傛涓鏉ワ紝g_ss 灝辨湁浜?Base 鐨?n 鎴愬憳鍜?256 * 1024 涓?CELL 緇撴瀯銆傚綋鍚?Derive 瀵硅薄浣跨敤 [] 鏃訛紙瀹冩槸 SPREADSHEET& 鍨嬶級錛屽畠鐨勮涓哄氨璺熸暟緇勪竴鑷翠簡錛坣 鎴愬憳涓嶄細绱㈠紩鍒幫紝榪欎篃鏄笉鍏佽媧劇敓綾繪湁鏁版嵁鎴愬憳鐨勫師鍥狅級銆傚叧浜庡畠鐨勫唴瀛樺茍娌℃湁鍦ㄥ畠澹版槑鐨勬椂鍊欏紑杈燂紝浠ュ強鍚庢潵鎬庝箞寮杈燂紝閭e氨鏄彟涓涓啋闄╂晠浜嬩簡銆傝繖縐嶆墜娉曡鎴戝啀涓嬈′負銆婃牳銆嬭繖鏈功鎵鎶樻湇銆?/pre>
    濂戒簡錛屽洖鍒?typedef 銆?/span>鎴戣寰楁渶澶氱殑鐢ㄦ硶涓嶅涔?typedef int value_type 錛屸滃彇緇板彿鈥濇槸浠栫殑鑱岃矗鎵鍦紝鎴戜笉鑳藉彧鎶婂畠鐞嗚В涓猴細褰撲綘鐪嬪埌 B錛?value_type 錛?鏃訛紝瀹冨彧涓嶈繃鏄?A 錛?int 錛夛紝榪樿鎶婂畠鐞嗚В涓哄儚涓婇潰鎻愬埌鐨勪竴鏍鳳細SPREADSHEET 騫朵笉鍙槸涓涓?CELL 錛岃屾槸澶氫釜 CELL 緇勬垚鐨?Array 鐨勯涓厓绱犵殑浣嶇疆鎸囬拡錛屼笉鐒跺悗闈㈢殑涓や釜璺熷眮铏弻鑳?yōu)鑳?鈥淸][]鈥?浣滀綍瑙i噴銆傛垜鐨勮繖縐嶆兂娉曡鎴戞兂璧蜂簡 ATL 涓殑 OLECHAR 錛屽湪閭i噷鎴戜篃鏇炬槸涓艦寮忎富涔夎咃紙鍙堥噸澶嶄簡涓閬嶏紒錛夈侽LECHAR 鍦ㄧ壒瀹氱殑騫沖彴涓婃湁鐗瑰畾鐨勬剰涔夛紝姣斿鍦?windows 騫沖彴騫跺畾涔変簡 UNICODE 鐨勬儏鍐典笅錛屽畠鏄?wchar_t 銆傚鏋滀繚鎸佽繖縐嶇悊瑙o紝灝嗘棤娉曟妸瀹冨綋鍋氫竴縐嶇壒鍒殑綾誨瀷錛屼粠鑰屽湪璇█灞傞潰涓婃湁浜嗛殰紕嶏紝涔熷氨榪濊儗浜?OLECHAR 鐢熸潵鏄負 COM 緇勪歡鍋氣滅壒孌娾濇湇鍔$殑鏈剰銆傛垜浠鎶婂畠褰撳仛鍩烘湰綾誨瀷鐪嬪緟錛岃嚦浜庢庝箞鐪嬪緟浠ュ強璇︾粏鐨勬柟娉曪紝鍙︿竴涓啋闄╂晠浜嬧︹?鎵浠ワ紝鈥滃彇緇板彿鈥濅笓瀹剁殑鍐呮兜騫朵笉鍗曡杽錛屾垜涓嶈兘涓鍘㈡儏鎰跨殑璁や負浠栧彧鏄釜鐖辨崏寮勪漢鐨勮鍘岄錛屽畠姝g粡璧鋒潵鍙篃鏄竴琛ㄤ漢鎵嶆淮銆備笅闈㈡槸涓浜?typedef 鐨勭敤娉曪紙鏉ヨ嚜銆奵++妯℃澘鍏冪紪紼嬨嬩腑鏌愪範棰樼殑瑙g瓟錛夛細
class foo {...};

typedef int (foo::*pmd);    // pmd 瑙i噴涓猴細鎸囧悜 foo 鏁版嵁鎴愬憳鐨勬寚閽堬紝榪斿洖鍊間負 int
typedef int (foo::*pmf)();  // pmf 瑙i噴涓猴細鎸囧悜 foo 鍑芥暟鎴愬憳鐨勬寚閽堬紝榪斿洖鍊間負 int
typedef int (*pfunc)();     // pfunc 瑙i噴涓猴細鎸囧悜鍑芥暟鐨勬寚閽堬紝榪斿洖鍊間負 int 涓旀棤鍙傛暟錛堟湁鍙傛暟鐨勪篃灝變笉闅炬兂璞′簡錛?
typedef const int& refc;    // 涓嶈榪欎釜浜?/span>
    涓婇潰鐨勫睍紺洪潪甯鎬笉鍏ㄩ潰錛岀綉涓婃葷粨鐨勪笢瑗夸竴澶у爢錛屾垜涓嶈兘鍋鋒噿寮曠敤錛屽幓鐪嬫墠瀹炲湪銆備笉榪囨湁浜嗚繖浜涚煡璇嗭紝鐞嗚В鍏跺畠涓滆タ搴旇瓚沖浜嗐?

宕囨枃 2009-12-09 21:20 鍙戣〃璇勮
]]>boost 涓殑 vector 鍙婂叾 operator+=http://www.shnenglu.com/Rich-cw/archive/2009/12/09/102837.html宕囨枃宕囨枃Wed, 09 Dec 2009 03:01:00 GMThttp://www.shnenglu.com/Rich-cw/archive/2009/12/09/102837.htmlhttp://www.shnenglu.com/Rich-cw/comments/102837.htmlhttp://www.shnenglu.com/Rich-cw/archive/2009/12/09/102837.html#Feedback0http://www.shnenglu.com/Rich-cw/comments/commentRss/102837.htmlhttp://www.shnenglu.com/Rich-cw/services/trackbacks/102837.html     鍦ㄧ湅 銆奵++ 妯℃澘鍏冪紪紼嬨?鐨勮繃紼嬩腑錛屾垜鏃舵椂鍒誨埢閮戒細鏈夋柊鍙戠幇銆傚浜庤繖涔嬪墠浠庢湭鎺ヨЕ榪?Boost 搴撶殑鎴戞潵璇達紝鎯婂鐨勬劅瑙夊挨鐢氥傚垵鐪嬫涔︾殑涔犻4-5錛氬搱錛屼笉灝辨槸瀹炵幇涓涓?param_type 鍢涖傜殑紜槸錛屼笉榪?answer 欏典笂鐨勬祴璇曚唬鐮侊紝鎵嶆槸璁╂垜鎯婂鐨勪笢瑗匡細

using namespace boost::assign;
std::vector<int> v1;
v1 += 1, 2, 30, 40, 500;
   璇濅笉澶氳錛屾寜鍥劇儲楠ョ殑鏉ュ垎鏋愩傛棦鐒舵槸 vector 鐨勬搷浣滐紝閭e氨鎵懼嚭瀵瑰簲鐨勫ご鏂囦歡鏉ョ湅鐪嬨傜涓鍙ヤ嬌鐢ㄤ簡 boost::assign 鍛藉悕絀洪棿錛岃?STL 搴撲腑褰撶劧涓嶄細鎻愪緵榪欐牱鐨?operator+= 錛屾灉鐒跺湪 boost\assign\std\vector.hpp 涓湁澹版槑錛?/pre>
template< class V, class A, class V2 >
inline list_inserter< assign_detail::call_push_back< std::vector<V,A> >, V > 
operator+=( std::vector<V,A>& c, V2 v ) {
    return push_back( c )( v );
}
    For the god鈥檚 sake 錛屽畠涓鍙f皵鎶涚粰鎴戣繖涔堝寰呮煡鐨勪笢瑗匡紝榪欎笉鏄墦鍑繪垜鐨勬眰鐭ユ涔堬紒錛堟瓏鎭墖鍒燴︹︼級緇х畫銆傚厛涓嶇榪欎釜閲嶈澆鎿嶄綔絎︾殑榪斿洖鍊鹼紝寰呬細鍦ㄥ嚱鏁扮殑榪斿洖璇彞涓嚜鐒朵細浜嗚В鍒般傜湅鍒?push_back( c )( v ) 榪欎釜鍙ュ瓙錛屽綋鐒舵槸涓涓?operator()錛岀戶緇悳绱€傝繖涓嬈★紝VS 浠g爜鏌ョ湅宸ュ叿鐩存帴鎶婃垜甯﹀埌浜嗙洰鐨勫湴鈥斺?boost\assign\list_inserter.hpp 榪欏潡鏂板ぇ闄嗐傛帴涓嬫潵鐨勪竴鍒囬兘灝嗗湪榪欓噷鍙戠敓銆傞鍏堟垜鍒頒簡 鈥減ush_back 绔欌濓細
template< class C >
inline list_inserter< assign_detail::call_push_back<C>, 
                      BOOST_DEDUCED_TYPENAME C::value_type >
push_back( C& c ) {
    static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;//static typename std::vector<int>::value_type* p = 0;
    return make_list_inserter( assign_detail::call_push_back<C>( c ), p );
}
    涓轟簡鏂逛究鏌ョ湅錛屾妸 make_list_inserter 鍜?call_push_back 涔熷垪鍑烘潵錛?/pre>
template< class Function, class Argument >
inline list_inserter<Function,Argument>
make_list_inserter( Function fun, Argument* ) {
    return list_inserter<Function, Argument>( fun );
}
template< class C >
class call_push_back {
    C& c_;  //榪欓噷錛宑_ 鏄?vector<int>& v1
public:
    call_push_back( C& c ) : c_( c ) { }
    
    template< class T >
    void operator()( T r ) {
        c_.push_back( r );
    }
};
    榪囦簡榪欐潯嫻佹按綰匡紝鐜板湪 operator+= 涓殑 push_back( c ) 灝辮鍔犲伐鎴愪簡錛?/pre>
    list_inserter<call_push_back, p>( call_push_back<vector<int> > ) 錛屽叾縐佹湁鎴愬憳 insert_ 涓?call_push_back<vector<int> > 銆傚墠闈㈡彁鍒扮殑 operator() 灝辮鐧誨満浜嗭紝鍏堢湅 list_inserter 鐨勯儴鍒嗕唬鐮侊細
template< class Function, class Argument = assign_detail::forward_n_arguments > 
class list_inserter {
    ...  
public:
    list_inserter( Function fun ) : insert_( fun ) {}    
    ...
    list_inserter& operator()() {    //榪欏氨鏄偅涓?operator() ! 緇堜簬鎵懼埌浣犱簡
        insert_( Argument() );
        return *this;
    }
    ...    
    template< class T >
    list_inserter& operator,( const T& r ) { //瀹冨寲鑵愭溄涓虹濂囷紝閫楀彿(,)浠庝互鍓嶇殑鈥滆礬鏍団濆崌綰ф垚浜嗏滀氦璀︹?/span>
        insert_( r  );
        return *this;
    }
    ... ...
private:   
    list_inserter& operator=( const list_inserter& );
    Function insert_;  // call_push_back
};
    鍒拌繖閲岋紝絎竴涓?v1 += 1 灝辨槸涓嬮潰榪欎釜鏍峰瓙錛?/pre>
    list_inserter<call_push_back, p>( call_push_back<vector<int> > )( 1 )
    鐩稿綋浜?call_push_back(1)錛宑all_push_back鐨?c_ 鎴愬憳灝辨槸 v1 鐨勫紩鐢紝灝辯浉褰撲簬 v1.push_back(1) 銆傜涓涓厓绱犺繘鍏ヤ簡瀹瑰櫒錛岄紦鎺屻?/pre>
    鐪嬭繃浠g爜鍚庯紝閫楀彿錛?, 錛夊氨涓嶈凍涓哄浜嗭紝 v1 += 1, 2, 30, 40, 500; 鍙ュ瓙涓殑 鈥?鈥濓紝 鍔熻兘鏄緷嬈℃彃鍏ラ楀彿鍚庣殑鍏冪礌銆?/pre>
    緇х畫鎺㈢儲鏂板ぇ闄嗏︹?/pre>

宕囨枃 2009-12-09 11:01 鍙戣〃璇勮
]]>boost 涓殑 and_ 濡備綍瀹炵幇鐭礬錛坰hort-circuit behavior錛?/title><link>http://www.shnenglu.com/Rich-cw/archive/2009/12/08/102787.html</link><dc:creator>宕囨枃</dc:creator><author>宕囨枃</author><pubDate>Tue, 08 Dec 2009 03:36:00 GMT</pubDate><guid>http://www.shnenglu.com/Rich-cw/archive/2009/12/08/102787.html</guid><wfw:comment>http://www.shnenglu.com/Rich-cw/comments/102787.html</wfw:comment><comments>http://www.shnenglu.com/Rich-cw/archive/2009/12/08/102787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Rich-cw/comments/commentRss/102787.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Rich-cw/services/trackbacks/102787.html</trackback:ping><description><![CDATA[<p>      瀹冩槸鐢ㄩ掑綊瀹炵幇鐨勩傞鍏堢湅涓嬮潰鐨勫彞瀛愶細</p><pre class="code">mpl::and_<exp1, exp2> </pre><pre class="code"> 瀹冧嬌鐢ㄧ殑鏄ご鏂囦歡涓殑妯℃澘: </pre><pre class="code">mpl::and_<exp1, exp2, true_, true_, true_> 1_ 2_ 3_ 4_ 5_ </pre><pre class="code"> 鐒跺悗榪欎釜妯℃澘緇ф壙鑷細 </pre><pre class="code">aux::and_impl< BOOST_MPL_AUX_NESTED_TYPE_WKND(exp1)::value, exp2, 3_, 4_, 5_ > </pre><pre class="code"> 鑻?1_ 鐨?value 涓?<span style="color: blue">false </span>錛屽畠?yōu)q粓緇撲簬涓嬮潰鐨勪富妯℃澘錛? <span style="color: blue"></span></pre><pre class="code"><span style="color: blue">template</span>< <span style="color: blue">bool </span>C_, <span style="color: blue">typename </span>T1, <span style="color: blue">typename </span>T2, <span style="color: blue">typename </span>T3, <span style="color: blue">typename </span>T4 > <span style="color: blue">struct </span>and_impl : false_ {}; </pre><pre class="code"> 鍚﹀垯錛岀戶緇墠榪涳細</pre><pre class="code">aux::and_impl< BOOST_MPL_AUX_NESTED_TYPE_WKND(exp2)::value, 3_, 4_, 5_, true_ > </pre><pre class="code"> 榪欏張鍥炲埌浜嗕笂涓姝ョ殑鍒嗗弶璺彛銆傚涓弬鏁扮殑鎯呭喌涓庢綾諱技銆傚綋鍏ㄩ儴鍙傛暟閮芥垚 ture/true_ 鏃訛紝灝辨湁浜嗚繖涓壒鍖栫増鏈細</pre><pre class="code"><span style="color: blue">template</span><> <span style="color: blue">struct </span>and_impl< <span style="color: blue">true </span>, true_, true_, true_, true_ > : true_ {};</pre><pre class="code"> 榪欐牱涓鏉ワ紝褰撳墠涓涓弬鏁頒負 false 鏃訛紝鍚庨潰鐨勫弬鏁板氨涓嶇敤瑙﹀強 ::value 錛屼篃灝變笉浼氳瀹炰緥鍖栵紝榪欏氨鏄?short-circuit behavior錛岀被浼間簬 ||, && 絳夋搷浣滅銆?</pre><pre class="code"> 鍚岀悊鍙帹鐭?or_ 鐨勮涓恒?/pre><img src ="http://www.shnenglu.com/Rich-cw/aggbug/102787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Rich-cw/" target="_blank">宕囨枃</a> 2009-12-08 11:36 <a href="http://www.shnenglu.com/Rich-cw/archive/2009/12/08/102787.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Little thing about boost::mpl::if_http://www.shnenglu.com/Rich-cw/archive/2009/12/07/102747.html宕囨枃宕囨枃Mon, 07 Dec 2009 12:47:00 GMThttp://www.shnenglu.com/Rich-cw/archive/2009/12/07/102747.htmlhttp://www.shnenglu.com/Rich-cw/comments/102747.htmlhttp://www.shnenglu.com/Rich-cw/archive/2009/12/07/102747.html#Feedback0http://www.shnenglu.com/Rich-cw/comments/commentRss/102747.htmlhttp://www.shnenglu.com/Rich-cw/services/trackbacks/102747.html      榪欐湰鏉ユ病浠涔堝ソ璇寸殑錛屼笉榪囨垜鍦ㄥ己鍟冧簡涓澶┿奵++ 妯℃澘鍏冪紪紼嬨嬭繖鏈功鍚庯紝澶磋剳鏄忔矇錛屽弽搴旇繜閽濄備篃鍊熸暣鐞?boost::mpl::if_ 榪欎釜璁╂垜鏌ラ槄鍗婂ぉ婧愮爜鐨勫皬涓滆タ鐨勬満浼氾紝璁╄嚜宸辨斁鏉句竴涓嬨?/p>

      if_ 灝辨槸鍊?if_c 瀹氫箟浜嗚嚜宸?::type 鐨勪竴涓厓鍑芥暟銆備箣鎵浠ユ垜浼氬 if_ 榪風硦錛屾槸鍥犱負鎴戞兂褰撶劧鐨勮涓?if_ 妯℃澘鐨勭涓涓弬鏁扮被鍨嬩負 bool 鍊箋傝繖鏄彈浜?if 鍏抽敭瀛楃殑褰卞搷錛屼篃鏈夐敊璇悊瑙?if_c 鐨勫師鍥犮備笖鐪?if_c 鐨勫0鏄庯細

template<
      bool C          // yeah, the type here is bool, but...
    , typename T1
    , typename T2
    >
struct if_c {
    typedef T1 type;
};

template<            // 鐗瑰寲鐗堟湰錛岀被浼艱繖鏍峰畾涔夊厓鍑芥暟鐨勪緥瀛愬緢澶?
      typename T1
    , typename T2
    >
struct if_c<false,T1,T2> {
    typedef T2 type;
};
  鏃㈢敓 if_c 錛屼綍鐢?if_ 錛熷姣斾簩鑰呯殑浠g爜錛宨f_ 姣?if_c 澶氫簡濡備笅鍙ュ瓙錛欱OOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))銆傝屽湪 MSVC錛圴S2008錛?緙栬瘧鍣ㄤ笂榪欎釜鍙ュ瓙娌¤搗浣滅敤銆傞偅瀹冨氨鏄負浜嗗吋瀹圭紪璇戝櫒鑰岀敓鐨勶紝灝卞悕瀛楁潵鐪嬪拰 lambda 琛ㄨ揪寮忕殑鏀寔鎬ф湁鍏崇郴銆傚叧浜庡叾浠栫紪璇戝櫒鐨勪簨鎯咃紝鎴戜笉鐭ラ亾錛屽厛鎼佺疆涓杈廣傚啀鐪?if_ 鐨勫0鏄庯細
template<
      typename BOOST_MPL_AUX_NA_PARAM(T1)
    , typename BOOST_MPL_AUX_NA_PARAM(T2)
    , typename BOOST_MPL_AUX_NA_PARAM(T3)
    >
struct if_ {
 private:
    // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC 
    typedef if_c<
#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS)
          BOOST_MPL_AUX_VALUE_WKND(T1)::value
#else
          BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)
#endif
        , T2
        , T3
        > almost_type_;
 
 public:
    typedef typename almost_type_::type type;
    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))
};
    榪欏氨寰堟槑浜嗕簡錛屽厛鐢?if_c 紜畾搴旇浣跨敤 T2 榪樻槸 T3錛屽啀鏉ヤ釜榪傚洖鐨勫畾涔夛紝灝辨垚浜?::type 銆傛墍浠ュ氨澹版槑鏉ョ湅錛宨f_ 鐨勭涓涓ā鏉垮弬鏁扮‘瀹炴槸瑕佹眰綾誨瀷銆傚垵鐪嬫椂錛屾垜閮侀椃浜嗭紝濡傛灉鎴戝枩嬈㈢敤 value 錛堟湁浜涗範鎯繛鑷繁涔熸劅鍒板鎬紒錛夛紝閭f垜涓轟粈涔堜笉鐢?if_c 鍛紵鍝堬紝褰撶劧鍙互錛屽涔︿笂鐨勪緥瀛愶細
template <typename T>
struct param_type 
    : mpl::if_<
               typename boost::is_scalar<T>::type,
               T,
               typename boost::add_reference<T const>::type
    > {};
typedef param_type<float>::type float_;
    瀹屽叏鍙互鏀逛負錛?/pre>
template <typename T>
struct param_type 
    : mpl::if_c<
                boost::is_scalar<T>::value,
                T,
                typename boost::add_reference<T const>::type
    > {};

     瀵逛簬涔︿笂闈㈢殑鍚庡嚑涓畝鍖栵紝涔熺収鏍烽傜敤銆傛垜灝辨洿閮侀椃浜嗭紝鎴戝墠鍑犲崄鍒嗛挓騫插槢鍘諱簡錛熸鎶撶潃 if_ 涓嶆斁錛屼笉鑰冭檻璇曡瘯鍏跺畠鍙兘銆傛垜鎯寵搗浜嗘槰澶╁涔︿笂鏌愪釜渚嬪瓙鐨勬墿鍏咃紝紜疄鍙楃敤錛堣繖褰撶劧涓嶆槸璇翠綔鑰呭潖璇濓紝浠栨槸涓轟簡浣夸功鍐欏緱娓呮櫚鏄庝簡鎵嶄笉浣跨敤鍦ㄦ垜鐪嬫潵鏄紭鍖栫殑涓滆タ鐨勩傚憙錛屾湁鐐歸暱鈥︼級錛屾垜鎵嶅啀涓嬈¤矗鎬搗鑷繁鐨勮涔︿範鎯傚彜浜轟簯錛氬敖淇′功涓嶅鏃犱功銆傝繖鍙ヨ瘽鐢ㄥ埌榪欓噷灝辨槸錛氬埆姝昏窡鐫涔﹁蛋錛堝摢閲岃窡鍝噷鍢涳紝椋庨┈鐗涗笉鐩稿強錛屽搱鍝堬紒錛夈?/p>

     鍏充簬 boost 錛屾垜涓嶄簡瑙g殑澶錛岄渶瑕佷竴姝ヤ竴姝ユ潵錛屽氨浠庣畝鍗曠殑寮濮嬪惂銆傜幇鍦ㄥ畠鍙槸榪滆繙瓚呭嚭浜嗘垜鐨勭悊瑙h寖鍥達紝甯屾湜鑳借刀涓婁竴鐐規(guī)槸涓鐐廣?/p>

宕囨枃 2009-12-07 20:47 鍙戣〃璇勮
]]>銆奍nside Com銆嬪皬緇擄紙涓錛?/title><link>http://www.shnenglu.com/Rich-cw/archive/2009/12/05/102618.html</link><dc:creator>宕囨枃</dc:creator><author>宕囨枃</author><pubDate>Sat, 05 Dec 2009 12:16:00 GMT</pubDate><guid>http://www.shnenglu.com/Rich-cw/archive/2009/12/05/102618.html</guid><wfw:comment>http://www.shnenglu.com/Rich-cw/comments/102618.html</wfw:comment><comments>http://www.shnenglu.com/Rich-cw/archive/2009/12/05/102618.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/Rich-cw/comments/commentRss/102618.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Rich-cw/services/trackbacks/102618.html</trackback:ping><description><![CDATA[<p>      鍓嶄笉涔呯湅瀹屼簡銆奍nside Com銆嬨備功鍐欏緱闈炲父媯掞紝鏈変簡榪欎釜鍩虹錛屾墦綆楃戶緇爺絀躲奀om  鏈川璁恒嬨備笅闈㈡槸鎴戠湅瀹屾涔﹁褰曚笅鏉ョ殑涓浜涗笢瑗匡細</p> <p>      1. CoCreateInstance 鐨勮皟鐢ㄨ繃紼?榪欓噷鐨勭粍浠朵綅浜?DLL 涓?錛?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/Rich-cw/WindowsLiveWriter/InsideCom_12C2C/CoCreateInstance_4.jpg"><img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=CoCreateInstance border=0 alt=CoCreateInstance src="http://www.shnenglu.com/images/cppblog_com/Rich-cw/WindowsLiveWriter/InsideCom_12C2C/CoCreateInstance_thumb_1.jpg" width=504 height=337></a> </p> <p>      鍥劇墖璇存槑浜嗕竴鍒囥傚姣斾竴涓?CoCreateInstance 鐨勫0鏄庯細</p> <pre class=code>WINOLEAPI CoCreateInstance(__in REFCLSID rclsid, __in_opt LPUNKNOWN pUnkOuter, __in DWORD dwClsContext, __in REFIID riid, __deref_out LPVOID FAR* ppv);</pre> <pre class=code> 鍊煎緱涓鎻愮殑鏄?CoGetClassObject 璋冪敤浜?Dll 鐨勫鍑哄嚱鏁?DllGetClassObject 錛孯egsvr32 /s /u 褰撶劧鏄嬌鐢ㄤ簡瀵瑰簲鐨?DllRegisterServer / DllUnregisterServer 瀵煎嚭鍑芥暟銆傚鏋滀嬌鐢?ATL錛岃繖涓鍒囩箒鏉傜殑宸ヤ綔閮界渷鍗翠簡錛屼絾鍙嶆敞鍐岃繕闇鎵嬪姩鎿嶄綔……</pre> <pre class=code> 2. 鑾峰彇鑱氬悎緇勪歡鎺ュ彛鐨勮繃紼嬶細</pre> <pre class=code> 鐞嗚В緇勪歡鑱氬悎鎶鏈槸涓嬈$棝鑻︾殑緇忓巻銆傚墠鍚庝笁澶╋紝鑻﹁嫤鎬濈儲錛屾垜緇堜簬鍦ㄩ偅涓槾鍐風殑涓嬪崍鑾峰緱浜?#8220;瀹変笢灝艱揪鏂?#8221;鐨勫瀭闈掋傚鏋滀粬鏃╀竴鐐圭粰鎴戜竴鐡舵櫤鍔涜嵂姘達紝浣曡嚦濡傛鍛紒鐪嬪浘璇磋瘽錛?/pre> <pre class=code><a href="http://www.shnenglu.com/images/cppblog_com/Rich-cw/WindowsLiveWriter/InsideCom_12C2C/aggrgation_2.jpg"><img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=aggrgation border=0 alt=aggrgation src="http://www.shnenglu.com/images/cppblog_com/Rich-cw/WindowsLiveWriter/InsideCom_12C2C/aggrgation_thumb.jpg" width=754 height=259></a> </pre> <a ></a> <p>      鍏朵腑錛屼袱涓狪nUnk閮芥槸闈炰唬鐞咺Unknown銆?/p> <p>      榪欐牱涓鏉ワ紝瀵逛簬澶栭儴緇勪歡鏉ヨ錛?/p> <table border=0 cellSpacing=0 cellPadding=2 width=248> <tbody> <tr> <td vAlign=top width=34> </td> <td vAlign=top width=25>IX</td> <td vAlign=top width=187>  Outer->QueryInterface</td> </tr> <tr> <td vAlign=top width=34>鑾峰彇</td> <td vAlign=top width=25> </td> <td vAlign=top width=187> </td> </tr> <tr> <td vAlign=top width=34> </td> <td vAlign=top width=25>IY</td> <td vAlign=top width=187>  InUnkO->QueryInterface</td> </tr> </tbody> </table> <p>      瀵逛簬鍐呴儴緇勪歡鏉ヨ:</p> <table border=0 cellSpacing=0 cellPadding=2 width=435> <tbody> <tr> <td vAlign=top width=34> </td> <td vAlign=top width=25>IX</td> <td vAlign=top width=374>  OutUnk->QueryInterface->InUnkO->QueryInterface</td> </tr> <tr> <td vAlign=top width=34>鑾峰彇</td> <td vAlign=top width=25> </td> <td vAlign=top width=374> </td> </tr> <tr> <td vAlign=top width=34> </td> <td vAlign=top width=25>IY</td> <td vAlign=top width=374>  OutUnk->QueryInterface</td> </tr> </tbody> </table> <p> </p> <p>      鎵鏈夌殑 QueryInterface 鍔ㄤ綔閮界洿鎺ユ垨闂存帴鐨勭敱澶栭儴緇勪歡鎵ц銆?/p> <p>      榪欒鎴戞兂璧蜂簡銆婂彉褰㈤噾鍒?銆嬨傚亣濡傛垜涓榪涚數(shù)褰遍櫌灝辯潯鐫浜嗭紝絳夊埌澶╃伀鍜屾搸澶╂煴緇勫悎涔嬪悗鎴戞墠閱掓潵銆傞偅涔堝浜庢垜鏉ヨ錛屾搸澶╂煴灝辨槸澶栭儴緇勪歡錛孖X涓鴻窇銆傚ぉ鐏負鍐呴儴緇勪歡錛孖Y涓洪銆傛鏃舵垜涓嶇煡閬撴湁澶╃伀鐨勫瓨鍦ㄣ傚綋鎴戦棶鎿庡ぉ鏌變綘浼氶鍚楃殑鏃跺欙紝浠栫煡閬撲粬涓嶄細椋烇紙娌℃湁IY鎺ュ彛錛夛紝浜庢槸浠栭棶澶╃伀浣犱細涓嶄細椋烇紝澶╃伀灝辮繑鍥濱Y錛堥錛夋帴鍙o紝浜庢槸鎿庡ぉ鏌卞憡璇夋垜浠栦細椋炪傚綋浠栭鐫鐨勬椂鍊欙紙鎴戞兂閫氳繃IY鏉ユ煡璇X錛夛紝鎴戦棶浠栦細璺戜箞錛岃繖鍙ヨ瘽鍙湁澶╃伀鍚緱瑙侊紙鍥犱負鎴戠敤鐨勬槸IY鎺ュ彛錛夛紝澶╃伀涓嶄細璺戯紝浠栧氨闂搸澶╂煴錛屾搸澶╂煴鐭ラ亾鑷繁浼氳窇錛堟湁IX鎺ュ彛錛夛紝浜庢槸灝辯粰鎴戜竴涓狪X鎺ュ彛銆傛暣涓繃紼嬩腑錛屾垜鍙煡閬撴搸澶╂煴錛屽茍涓嶇煡閬撳ぉ鐏殑瀛樺湪錛屼簬鏄搸澶╂煴鑱氬悎浜嗗ぉ鐏?/p> <p>      浣嗘垜鎬庝箞鍙兘榪涘幓灝辯潯鐫浜嗗憿錛?/p> <p>      鍐呴儴緇勪歡鐨勪唬鐞嗘帴鍙e彧鏄畝鍗曠殑璋冪敤澶栭儴鐨凲ueryInterface錛屾槸涓漿鍙戠珯錛屼竴鍒囧伐浣滀氦鐢卞閮ㄧ粍浠剁粺絳廣傚叧浜庡叿浣撳疄鐜幫紝銆奀OM鏈川璁恒嬩腑緇欏嚭鐨?"impunk.h" 澶存枃浠朵腑鏈夊緢濂界殑瀹炵幇銆傛垜闈炲父鍠滄鍏朵腑鍏充簬鎺ュ彛鏌ユ壘琛ㄧ殑瀹炵幇錛岄偅涓猳ffset鑾峰彇鍋忕Щ鍦板潃鐨勬柟娉曡鎴戣繖涓狢璇█鍔熷姏钖勫急鐨勪漢鎰熷埌鍗佸垎鎯劎銆?/p> <p>      榪囦袱澶╁啀鎶婂闂寸嚎紼嬪拰鑷敱綰跨▼鏁寸悊鍑烘潵銆?/p> <img src ="http://www.shnenglu.com/Rich-cw/aggbug/102618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Rich-cw/" target="_blank">宕囨枃</a> 2009-12-05 20:16 <a href="http://www.shnenglu.com/Rich-cw/archive/2009/12/05/102618.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Boost 涓殑 BOOST_STATIC_ASSERThttp://www.shnenglu.com/Rich-cw/archive/2009/12/04/102530.html宕囨枃宕囨枃Fri, 04 Dec 2009 05:05:00 GMThttp://www.shnenglu.com/Rich-cw/archive/2009/12/04/102530.htmlhttp://www.shnenglu.com/Rich-cw/comments/102530.htmlhttp://www.shnenglu.com/Rich-cw/archive/2009/12/04/102530.html#Feedback1http://www.shnenglu.com/Rich-cw/comments/commentRss/102530.htmlhttp://www.shnenglu.com/Rich-cw/services/trackbacks/102530.html鍏堢湅瀹氫箟鍦ㄥご鏂囦歡涓殑璇彞錛?/font>
template <bool x> struct STATIC_ASSERTION_FAILURE;

template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };

template<int x> struct static_assert_test{};

鈥?/span>
浣跨敤鐨勬槸鏄劇ず杞崲
// Note that the argument to the assert is explicitly cast to bool using old-
// style casts: too many compilers currently have problems with static_cast
// when used inside integral constant expressions.
鈥?/span>
#elif defined(BOOST_MSVC)
#define BOOST_STATIC_ASSERT( B ) \
   typedef ::boost::static_assert_test<\
      sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\ // ***********
         BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
鍏抽敭鐨勫湴鏂瑰湪浜?sizeof() 涓殑鍙ュ瓙銆傚綋 (bool)( B ) 涓?false 鏃訛紝鍥犱負娌℃湁榪欎釜鐗瑰寲鐗堟湰錛岀紪璇戝櫒灝嗘姤閿欙紝濡?/font>
銆?b>Beyond the C++ Standard Library: An Introduction to Boost銆嬩腑鎵榪幫細
Error: use of undefined type
'boost::STATIC_ASSERTION_FAILURE<false>'
BOOST_JOIN(X, Y) 鏈緇堣В閲婁負 X##Y銆俖_COUNTER__ 鍦?MSDN 涓殑鎻忚堪錛?/pre>
Expands to an integer starting with 0 and incrementing by 1 every time it is used in a compiland.
姣忎嬌鐢ㄤ竴嬈″畠?yōu)澧?銆?/pre>

宕囨枃 2009-12-04 13:05 鍙戣〃璇勮
]]> 无码精品久久久久久人妻中字| 日日狠狠久久偷偷色综合96蜜桃 | 久久99国产精品久久| 久久97精品久久久久久久不卡| 日韩精品久久久久久| 天堂无码久久综合东京热| 亚洲中文字幕无码一久久区| 国产美女亚洲精品久久久综合 | 国产日产久久高清欧美一区| 国内精品伊人久久久久网站| 国产精品久久久久久久app| 精品久久久久中文字幕日本| 很黄很污的网站久久mimi色| 午夜人妻久久久久久久久| 久久亚洲国产中v天仙www| 亚洲综合伊人久久大杳蕉| 久久成人18免费网站| 久久91精品国产91久久小草| 久久99热这里只有精品66| 韩国三级中文字幕hd久久精品| 99久久国产亚洲综合精品| 久久精品成人一区二区三区| 2020久久精品国产免费| 亚洲中文字幕无码久久2020| 人妻系列无码专区久久五月天| 国产精品久久亚洲不卡动漫| 久久免费看黄a级毛片| 亚洲午夜无码AV毛片久久| 国产一区二区三精品久久久无广告| 麻豆AV一区二区三区久久| 久久精品中文无码资源站| 久久无码AV中文出轨人妻| 国产高潮国产高潮久久久91| 99精品久久精品| 久久精品九九亚洲精品天堂| 久久精品国产精品亚洲毛片| 日韩人妻无码精品久久免费一 | 久久精品国产精品亚洲下载| 草草久久久无码国产专区| 精品久久久久久久久久中文字幕 | 国产99久久久国产精免费|