锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品综合久久一线,国产午夜免费高清久久影院,狠狠色噜噜色狠狠狠综合久久 http://www.shnenglu.com/jacky2019/category/3690.html榪欎釜kisser涓嶅お鍐?/description>zh-cnThu, 01 Apr 2010 17:08:38 GMTThu, 01 Apr 2010 17:08:38 GMT60c++ volatile鍏抽敭瀛?/title><link>http://www.shnenglu.com/jacky2019/archive/2010/04/01/111249.html</link><dc:creator>kk</dc:creator><author>kk</author><pubDate>Thu, 01 Apr 2010 02:54:00 GMT</pubDate><guid>http://www.shnenglu.com/jacky2019/archive/2010/04/01/111249.html</guid><wfw:comment>http://www.shnenglu.com/jacky2019/comments/111249.html</wfw:comment><comments>http://www.shnenglu.com/jacky2019/archive/2010/04/01/111249.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/jacky2019/comments/commentRss/111249.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jacky2019/services/trackbacks/111249.html</trackback:ping><description><![CDATA[<span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span>c++涓殑volatile鍏抽敭瀛椾竴鐩存病鏈変嬌鐢ㄨ繃銆傛渶榪戜嬌鐢ㄤ簡涓涓嬨傝鍏抽敭瀛楃殑鎰忔濆氨鏄憡璇夌紪璇戝櫒涓嶈瀵硅鍙橀噺榪涜浼樺寲錛屼嬌鐢ㄥ湴鍧瀵硅鍙橀噺榪涜鍙栧艱屼笉瑕佺洿鎺ヤ嬌鐢ㄨ鍙橀噺宸茬粡瀛樺湪cach/瀵勫瓨鍣ㄤ腑鐨勫箋?br><br>嫻嬭瘯浠g爜濡備笅錛?br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080"> 1</span><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> volatile.cpp : Defines the entry point for the console application.<br></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//<br></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #008000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> _tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, _TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img id=Codehighlighter1_134_292_Open_Image onclick="this.style.display='none'; Codehighlighter1_134_292_Open_Text.style.display='none'; Codehighlighter1_134_292_Closed_Image.style.display='inline'; Codehighlighter1_134_292_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_134_292_Closed_Image onclick="this.style.display='none'; Codehighlighter1_134_292_Closed_Text.style.display='none'; Codehighlighter1_134_292_Open_Image.style.display='inline'; Codehighlighter1_134_292_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_134_292_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_134_292_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">volatile int a = 1;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #008000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    printf (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a = %d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, a);<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    __asm<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id=Codehighlighter1_206_238_Open_Image onclick="this.style.display='none'; Codehighlighter1_206_238_Open_Text.style.display='none'; Codehighlighter1_206_238_Closed_Image.style.display='inline'; Codehighlighter1_206_238_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_206_238_Closed_Image onclick="this.style.display='none'; Codehighlighter1_206_238_Closed_Text.style.display='none'; Codehighlighter1_206_238_Open_Image.style.display='inline'; Codehighlighter1_206_238_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_206_238_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_206_238_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">        mov DWORD ptr [ebp</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">], 10h // 淇敼a鐨勫間負0x10<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">    }</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    printf (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a = %d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, a);<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    getchar();<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span></div> </span><br>濡傛灉緙栬瘧鍣ㄦ病鏈変紭鍖栫殑璇濓紝鎵撳嵃鍑烘潵鐨勫煎簲璇ユ槸1鍜?6銆傚弽涔嬶紝濡傛灉娌℃湁浣跨敤volatile錛屼紭鍖栦箣鍚庡簲璇ユ墦鍗板嚭鏉ョ殑鏄?鍜?<br><br>鎴戝湪vc6鍜寁c2008涓嬫祴璇曚簡涓涓嬶細<br>-----------------------------------------------------------------------------------------<br><br>vc2008<br>-----------------------------------------------------------------------------------------<br>娌℃湁鍏抽敭瀛梫olatile<br>debug涓嬫墦鍗扮殑鏄?1 鍜?1 ---涓轟粈涔堜細琚紭鍖栦簡鍛紵鎴戠殑浼樺寲緙栬瘧閫夐」鏄痙isabled鐨?br>release涓嬫墦鍗扮殑鏄?1 鍜?1<br>鏈夊叧閿瓧volatile<br><font face=瀹嬩綋>debug涓嬫墦鍗扮殑鏄?1 鍜?1 --- 寰堝鎬紒<br>release涓嬫墦鍗扮殑鏄?1 鍜?16<br><br>鎴戞兂鍙兘鏄紪璇戝櫒瀵筪ebug涓嬩綔浜嗙壒孌婂鐞嗐傝屼笖璇ョ▼搴忛潪甯哥畝鍗?/font><br><br>vc6.0<br><font face=瀹嬩綋>-----------------------------------------------------------------------------------------<br>娌℃湁鍏抽敭瀛梫olatile<br><font face=瀹嬩綋>debug涓嬫墦鍗扮殑鏄?1 鍜?16<br>release涓嬫墦鍗扮殑鏄?1 鍜?1</font><br>鏈夊叧閿瓧volatile<br><font face=瀹嬩綋>debug涓嬫墦鍗扮殑鏄?1 鍜?16<br>release涓嬫墦鍗扮殑鏄?1 鍜?1 --- 寰堝鎬紒<br><br><br>灝忕粨錛?br>鍦ㄥ綰跨▼澶氭牳鐨勬儏鍐典笅錛岃闃叉琚紪璇戝櫒浼樺寲錛?/font></font> <img src ="http://www.shnenglu.com/jacky2019/aggbug/111249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jacky2019/" target="_blank">kk</a> 2010-04-01 10:54 <a href="http://www.shnenglu.com/jacky2019/archive/2010/04/01/111249.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐜艦緙撳啿http://www.shnenglu.com/jacky2019/archive/2010/04/01/111243.htmlkkkkThu, 01 Apr 2010 01:17:00 GMThttp://www.shnenglu.com/jacky2019/archive/2010/04/01/111243.htmlhttp://www.shnenglu.com/jacky2019/comments/111243.htmlhttp://www.shnenglu.com/jacky2019/archive/2010/04/01/111243.html#Feedback0http://www.shnenglu.com/jacky2019/comments/commentRss/111243.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/111243.html鐜艦緙撳啿鏄彲浠ヤ笉鐢ㄥ姞閿佺殑銆備笅闈㈡槸涓涓疄鐜扮殑鐜艦緙撳啿銆備嬌鐢╟瀹炵幇錛屽彲鑳戒細鍑虹幇write婊℃儏鍐碉紝榪欑鎯呭喌瀵艱嚧鐨勭粨鏋滃氨鏄痺rite涓嶆垚鍔燂紝鏁版嵁娌″啓榪涘幓銆?/pre>
鎴戣繖閲屽彧鏄畝鍗曠殑涓簡銆?/pre>
  1 //
  2 
  3 #include "stdafx.h"
  4 #include <windows.h>
  5 #include <time.h>
  6 #include <stdlib.h>
  7 
  8 #define MAX_BUF_LEN 20        // buf len // 蹇呴』瑕佸ぇ浜?
  9 int nRead = 0;                // read pos
 10 int nWrite = 0;                // write pos
 11 int buf[MAX_BUF_LEN] = {0}; // loop buf
 12 
 13 #define NN 20000
 14 __int64 sum = 0;
 15 __int64 lose = 0;
 16 __int64 total = (__int64)(1+NN)*(__int64)NN/2;
 17 bool bWriteFinished = false;
 18 
 19 void WriteBuf(int n)
 20 {
 21     int rpos = nRead;
 22     int wpos = nWrite;
 23     wpos++;
 24     // buf婊★紙鍗硍rite鍙堣拷涓婁簡read錛? 娉ㄤ負浜嗛伩鍏嶄笌鍒濆鐘舵侀噸澶嶅垽鏂?br> 25     // 鎵浠ヨ繖閲屾渶鍚庝竴涓猙uf娌℃湁鍐欏氨璁や負宸茬粡婊′簡銆傛墍浠AX_BUF_LEN涓嶈兘涓?
 26     // 榪欓噷錛岀洿鎺ヤ涪寮冭buf
 27     if (wpos % MAX_BUF_LEN == rpos % MAX_BUF_LEN)
 28     {
 29         lose += n;
 30         return;
 31     }
 32 
 33     buf[nWrite] = n;
 34     nWrite++;
 35     if (nWrite == MAX_BUF_LEN)
 36         nWrite = 0;
 37 }
 38 
 39 int ReadBuf()
 40 {
 41     if (nWrite == nRead)
 42         return -1;
 43 
 44     int n = buf[nRead];
 45     nRead++;
 46     if (nRead == MAX_BUF_LEN)
 47         nRead = 0;
 48     return n;
 49 }
 50 
 51 DWORD WINAPI ReadThread(LPVOID lpParameter)
 52 {
 53     int tmp = 0;
 54     int count = 0;
 55     while (true)
 56     {
 57         //printf("ReadThread = %d\n", ReadBuf());
 58         tmp = ReadBuf();
 59         if (-1 != tmp)
 60         {
 61             count++;
 62             sum += tmp;
 63             if (count == NN)
 64             {
 65                 printf ("ReadThread finished!\n");
 66                 break;
 67             }
 68         }
 69         else if (bWriteFinished)
 70         {
 71             printf ("ReadThread finished222!\n");
 72             break;
 73         }
 74 
 75         Sleep(rand() % 10);
 76     }
 77     return 0;
 78 }
 79 
 80 DWORD WINAPI WriteThread(LPVOID lpParameter)
 81 {
 82     int n = 0;
 83     while (true)
 84     {
 85         n++;
 86         WriteBuf(n);
 87         if (n == NN)
 88         {
 89             printf ("WriteThread finished!\n");
 90             bWriteFinished = true;
 91             break;
 92         }
 93 
 94         Sleep(rand() % 10);
 95     }
 96     return 0;
 97 }
 98 
 99 int main(int argc, char* argv[])
100 {
101     srand(time(NULL));
102 //     for (int i = 0; i < 10; i++)
103 //     {
104 //         printf ("rand = %d\n", rand() % 10);
105 //     }
106 
107     DWORD threadid[2= {0};
108     HANDLE hThread[2= {0};
109     int param = 0;
110     hThread[0= CreateThread(NULL, 0, ReadThread, &param, CREATE_SUSPENDED, &threadid[0]);
111     ResumeThread(hThread[0]);
112     hThread[1= CreateThread(NULL, 0, WriteThread, &param, CREATE_SUSPENDED, &threadid[1]);
113     ResumeThread(hThread[1]);
114 
115     getchar();
116 
117     printf ("total = %lld\n", total);
118     printf ("lose = %lld\n", lose);
119     printf ("sum = %lld\n", sum);
120 
121     if (total == lose + sum)
122     {
123         printf ("loop buf works well!\n");
124     }
125     else
126     {
127         printf ("loop buf works wrong!\n");
128     }
129 
130     return 0;
131 }
132 
涓婇潰鏄姞浜嗘祴璇曚唬鐮佺殑錛屾垜嫻嬭瘯浜嗕竴涓嬩技涔庢病闂銆?/pre>
娉ㄦ剰錛氳繖閲屽彧鍏佽涓涓嚎紼嬭錛屼竴涓嚎紼嬪啓銆傚鏋滄槸澶氫釜綰跨▼璇誨啓鐨勮瘽錛岄渶瑕侀攣錛?/pre>
鍙﹀錛屽緢澶氱粏鑺傞兘娌¤冭檻榪涘幓


kk 2010-04-01 09:17 鍙戣〃璇勮
]]>python涓巆++浜や簰瀛︿範鍏ラ棬涔?http://www.shnenglu.com/jacky2019/archive/2007/06/06/25662.htmlkkkkWed, 06 Jun 2007 08:25:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/06/06/25662.htmlhttp://www.shnenglu.com/jacky2019/comments/25662.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/06/06/25662.html#Feedback4http://www.shnenglu.com/jacky2019/comments/commentRss/25662.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/25662.html榪欐璁茶錛屽浣曟墿灞昪++搴撱傞氳繃boost.python鎶奵++搴撶紪璇戞垚python鑳藉璋冪敤鐨刣ll銆?/p>


閫氳繃涓婁竴嬈$殑鏁欑▼鍚庯紝澶у閮藉簲璇ヤ細浣跨敤boost.python浜嗐傛妸c++紼嬪簭緙栬瘧鎴恜yd鏂囦歡銆傜敱浜巆++鏈夊緢澶氱壒鎬э紝鎵浠ワ紝濡傛灉浣犵殑紼?/p>

搴忕敤浜嗗緢澶氱殑c++鐗規х殑璇濓紝閭d箞浣犲繀欏誨仛寰堝宸ヤ綔浜嗐傚儚铏氭嫙鍑芥暟錛屽嚱鏁伴噸杞斤紝緇ф壙錛岄粯璁ゅ肩瓑絳夈傚叿浣撳浣曡漿鍖栵紝璇峰弬

boost.python鐨勬枃妗d簡銆?/p>


榪欏嚑澶╁皾璇曠潃鎶奵++紼嬪簭搴撶紪璇戞垚python鍙皟鐢ㄧ殑dll錛屼笉鐭ラ亾涓轟粈涔堜竴鐩翠笉鍙敤銆傘傚緢鏄儊闂楓傝佹槸鏄劇ず濡備笅鐨勯敊璇細

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    import pydll
ImportError: No module named pydll

鎰忔濇槸璇存壘涓嶅埌dll銆傛垜鎶奷ll閮絚opy鍒皃ython/dlls涓嬩簡榪樻槸涓嶈錛岃屼笖鎴戠‘瀹歱ython鐨剆ys.path鍖呭惈浜唒ython/dlls鐩綍浜嗐?/p>

寰堟槸涓嶈В銆傜綉涓婁篃寰堥毦鎵懼埌璧勬枡錛実oogle浜嗗緢闀挎椂闂存壘涓嶅埌鏈夌敤鐨勮祫鏂欙紝濂藉儚涓枃鏂歸潰鐨勮祫鏂欏緢灝戠殑銆備粖澶╁皾璇曚簡涓涓媑oogle

鑻辨枃璧勬枡錛岀粓浜庢湁浜嗘柊鐨勫彂鐜幫細
http://mail.python.org/pipermail/c++-sig/2007-February/011971.html
You are using Python2.5. In this version of Python you have to have
file extension
to be "pyd" - sge.pyd

--
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/

鏈変漢紕板埌鐨勯棶棰樿窡鎴戠殑鏄竴鏍風殑銆傚悗闈㈤偅涓猂oman鍥炵瓟浜嗕竴涓嬶紝鏄枃浠舵墿灞曞悕鐨勯棶棰橈紒錛侊紒涓轟粈涔堜笉鏀寔dll鍛紵涓嶈В銆傚洖鍘昏瘯

浜嗕竴涓嬫妸鍚庣紑鍚嶆敼浜嗗氨鎴愬姛浜嗐傘傘倃hy???


涓嬮潰鏉ョ湅涓涓嬫垜鐨勯偅涓畝鍗曠殑渚嬪瓙錛?br>榪欎釜渚嬪瓙鏉ヨ嚜浜庣綉涓婏紝
http://www.vckbase.com/document/viewdoc/?id=1540
C++ 鎵╁睍鍜屽祵鍏?Python
浣滆咃細鑳¢噾灞?br>婧愮爜涓嬭澆鍦板潃錛?a >http://www.vckbase.com/code/downcode.asp?id=2777


榪欐槸涓涓潪甯哥畝鍗曠殑dll宸ョ▼銆傜粰python鎻愪緵浜嗕竴涓嚱鏁皊tatic PyObject* Recognise(PyObject *self, PyObject *args)銆?/p>


1銆佷笉浣跨敤boost.python搴撴潵鐩存帴鏋勫緩dll
鎺ヤ笅鏉ワ紝鎴戜滑鏉ョ敤C++涓篜ython緙栧啓鎵╁睍妯″潡(鍔ㄦ侀摼鎺ュ簱)錛屽茍鍦≒ython紼嬪簭涓皟鐢–++寮鍙戠殑鎵╁睍鍔熻兘鍑芥暟銆傜敓鎴愪竴涓彇鍚嶄負

pyUtil鐨刉in32 DLL宸ョ▼錛岄櫎浜唒yUtil.cpp鏂囦歡浠ュ錛屼粠宸ョ▼涓Щ闄ゆ墍鏈夊叾瀹冩枃浠訛紝騫跺~鍏ュ涓嬬殑浠g爜錛?

// pyUtil.cpp
#ifdef PYUTIL_EXPORTS
#define PYUTIL_API __declspec(dllexport)
#else
#define PYUTIL_API __declspec(dllimport)
#endif

#include<windows.h>
#include<string>
#include<Python.h>
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
        )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
std::string Recognise_Img(const std::string url)
{
    //榪斿洖緇撴灉
    return "浠巇ll涓繑鍥炵殑鏁版嵁... : " +url;
}
static PyObject* Recognise(PyObject *self, PyObject *args)
{
    const char *url;
    std::string sts;
    if (!PyArg_ParseTuple(args, "s", &url))
        return NULL;
    sts = Recognise_Img(url);
    return Py_BuildValue("s", sts.c_str() );
}
static PyMethodDef AllMyMethods[] = {
    {"Recognise",  Recognise, METH_VARARGS},//鏆撮湶緇橮ython鐨勫嚱鏁?br>    {NULL,      NULL}        /* Sentinel */
};
extern "C" PYUTIL_API void initpyUtil()
{
    PyObject *m, *d;
    m = Py_InitModule("pyUtil", AllMyMethods); //鍒濆鍖栨湰妯″潡錛屽茍鏆撮湶鍑芥暟
    d = PyModule_GetDict(m);
}

鍦≒ython浠g爜涓皟鐢ㄨ繖涓姩鎬侀摼鎺ュ簱錛?(璁板緱鎶奷ll鐨勬墿灞曞悕鏀逛負.pyd錛屽彟澶杁ll鐨勮礬寰勮鑳藉琚绱㈠埌)
import pyUtil
result = pyUtil.Recognise("input url of specific data")
print "the result is: "+ result

 

2銆佷嬌鐢╞oost.python搴撴潵鏋勫緩dll
鐢–++涓篜ython鍐欐墿灞曟椂錛屽鏋滄偍鎰挎剰浣跨敤Boost.Python搴撶殑璇濓紝寮鍙戣繃紼嬩細鍙樺緱鏇村紑蹇僇錛岃緙栧啓涓涓笌涓婅堪pyUtil鍚屾牱鍔熻兘

鐨勫姩鎬侀摼鎺ュ簱錛屽彧闇鎶婃枃浠跺唴瀹規浛鎹負涓嬮潰鐨勪唬鐮併傚綋鐒訛紝緙栬瘧闇瑕乥oost_python.lib鏀寔錛岃繍琛岄渶瑕乥oost_python.dll鏀寔

銆?
#include<string>
#include <boost/python.hpp>
using namespace boost::python;
#pragma comment(lib, "boost_python.lib")
std::string strtmp;
char const* Recognise(const char* url)
{
    strtmp ="浠巇ll涓繑鍥炵殑鏁版嵁... : ";
    strtmp+=url;
    return strtmp.c_str();
}
BOOST_PYTHON_MODULE(pyUtil)
{
    def("Recognise", Recognise);
}

鍙互闈炲父鏄庢樉鍦扮湅鍒幫紝鐢ㄤ簡boost.python搴撲箣鍚庯紝綆鍗曚簡寰堝銆傚洜涓篵oost.python涓轟綘鍋氫簡寰堝鐨勪簨鎯呫傘傛仼銆?/p>

 

濂藉儚娌℃湁璁插緢澶氭湁鐢ㄧ殑涓滆タ錛屽厜欏劇潃璁蹭簡錛屽懙鍛點傘傘傛垜涔熻繕鍦ㄧ戶緇涔犱箣涓備笅嬈″啓鐐逛粈涔堝憿錛熺戶緇涔犱簡鍝?/p>

 



kk 2007-06-06 16:25 鍙戣〃璇勮
]]>
c++涓祵鍏ython鍏ラ棬4 涔?Boost.Pythonhttp://www.shnenglu.com/jacky2019/archive/2007/06/01/25254.htmlkkkkFri, 01 Jun 2007 02:32:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/06/01/25254.htmlhttp://www.shnenglu.com/jacky2019/comments/25254.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/06/01/25254.html#Feedback5http://www.shnenglu.com/jacky2019/comments/commentRss/25254.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/25254.html鍧忓python25 + vs2005 (2005鐪熻楄祫婧愰樋銆傘傘?

鏈変竴孌墊椂闂存病鍐檅log浜嗐傝繖鍑犲ぉ閮藉湪鐮旂┒鎬庝箞灝佽c++錛岃python鍙互鐢╟++鐨勫簱銆傚湪緗戜笂鍙戠幇浜哹oost.python榪欎釜濂藉挌鍜氥備笉

榪囧湪浣跨敤榪囩▼涓鍒頒竴鐐歸棶棰樸傛湰鏂囨暀澶у濡備綍鎶?/p>

char const* greet()
{
   return "hello, world";
}

灝佽鎴恜ython銆傚疄闄呬笂榪欐槸python鏁欑▼閲岄潰鐨勫挌鍜氥?/p>


棣栧厛涓嬭澆Boost錛?a >www.boost.org銆俠oost.python鍦╞oost閲岄潰浜嗐傚湪visual studio 2005 command prompt涓璶avigation鍒?/p>

boost\boost_1_34_0\涓嬨傝寰椾竴瀹氳鐢╲isual studio 2005 command prompt榪欎釜vs2005甯︾殑tools錛屼笉瑕佺敤cmd.exe錛屽惁鍒欎細

紕板埌寰堝閿欒鐨勩傜劧鍚庡氨鏄妸bjam.exe鎷瘋礉鍒頒竴涓兘琚壘鍒扮殑鐩綍涓嬶紝鎴栬呯洿鎺ヤ篃鎷瘋礉鍒癰oost\boost_1_34_0\涓嬪嵆鍙傜劧鍚庯紝

璁劇疆python鐨勬牴鐩綍鍜宲ython鐨勭増鏈紝涔熷彲鐩存帴鎶婂畠浠姞鍒板潖澧冪洰褰曚腑錛岄偅鏍峰氨涓嶇敤姣忔閮借緗竴涓嬨?br>set PYTHON_ROOT=c:/python25
set PYTHON_VERSION=2.5

鎺ョ潃灝卞彲浠ョ洿鎺ヨ繍琛屼簡錛宐jam -sTOOLS=vc-8_0
鏁翠釜緙栬瘧榪囩▼瑕佸緢闀挎椂闂淬傘傘?/p>

鎴愬姛涔嬪悗錛屽氨浼氭湁濂藉涓猙oost_python-vc80-****.dll,.lib鐨勶紝鎶婁粬浠兘鎷瘋礉鍒頒竴涓兘琚郴緇熸壘鍒扮殑鐩綍錛屼笉濡ㄧ洿鎺ユ妸浠栦滑閮?/p>

鎵斿埌c:\windows\system32涓嬨?/p>

鎺ョ潃錛屾垜浠紑濮嬬紪璇慼ello銆俷avigation鍒癰oost\boost_1_34_0\libs\python\example\tutorial涓嬶紝bjam -sTOOLS=vc-8_0榪愯

錛屽湪bin鐨勭洰褰曚笅鍗充細鐢熸垚hello.pyd銆傝繖涓嬪氨鍩烘湰鎴愬姛浜嗭紝濡傛灉娌℃垚鍔熺殑璇濓紝check涓涓嬩笂闈oost_python鐨勯偅浜沝ll鑳藉惁琚郴

緇熸壘鍒般傚彟澶栵紝榪欓噷鏈塸ython25鐨勪竴涓猙ug銆傘傘傛垜鑺變簡寰堥暱鏃墮棿鎵嶅湪python鐨刴ail lists涓壘鍒頒簡銆傚瘨銆傘傘?/p>

閿欒濡備笅鎵紺猴細
D:\Learn\Python\boost\boost_1_34_0\libs\python\example\tutorial>bjam
Jamroot:17: in modules.load
rule python-extension unknown in module Jamfile</D:/Learn/Python/boost/boost_1_3
4_0/libs/python/example/tutorial>.
D:/Learn/Python/boost/boost_1_34_0/tools/build/v2/build\project.jam:312: in load
-jamfile
D:/Learn/Python/boost/boost_1_34_0/tools/build/v2/build\project.jam:68: in load
D:/Learn/Python/boost/boost_1_34_0/tools/build/v2/build\project.jam:170: in proj
ect.find
D:/Learn/Python/boost/boost_1_34_0/tools/build/v2\build-system.jam:237: in load
D:\Learn\Python\boost\boost_1_34_0\libs\python\example\..\..\..\tools\build\v2/k
ernel\modules.jam:261: in import
D:\Learn\Python\boost\boost_1_34_0\libs\python\example\..\..\..\tools\build\v2/k
ernel/bootstrap.jam:132: in boost-build
D:\Learn\Python\boost\boost_1_34_0\libs\python\example\boost-build.jam:7: in mod
ule scope

瑙e喅鍔炴硶濡備笅錛?br>鍦╞oost\boost_1_34_0\tools\build\v2\鐩綍涓嬫壘鍒皍ser-config.jam鏂囦歡錛屾墦寮鍦?br>import toolset : using ;
涓嬮潰鍔犱竴琛屼唬鐮侊細
using python ;
鍐嶉噸鏂扮紪璇戜竴涓媌oost錛岀劧鍚庡氨娌¢棶棰樹簡銆倀utorial閲岄潰鐨刪ello鑳介『鍒╃紪璇戦氳繃銆俻s.榪欎釜闂鍥版壈浜嗘垜濂介暱鏃墮棿銆傘俿igh銆傘?/p>

銆?/p>

緙栬瘧鎴愬姛鍚庝細浜х敓涓涓猦ello.pyd錛屽湪bin鐨勭洰褰曚笅闈€?/p>


鏈夊ソ澶氬姙娉曟祴璇曟hello.pyd鏄惁鍙互鐢ㄣ?br>鏂規硶涓錛屾妸瀹冩嫹璐濆埌python25\dlls涓嬶紝鎵撳紑IDLE錛?br>>>> import hello
>>> hello.greet()
'hello, world'
>>>
鏂規硶浜岋紝鐩存帴鍦ㄥ綋鍓嶇洰褰曚笅鍐欎竴涓猵ython鏂囦歡錛岀劧鍚庣洿鎺ヨ皟鐢╤ello.pyd鍗沖彲銆傛諱箣錛宧ello.pyd灝辨槸涓涓猵ython鏂囦歡浜嗐傘傚棷

銆傛搷浣渉ello.pyd鏍瑰叾浠杙ython鏂囦歡鏄竴鏍風殑銆?br>榪欐牱灝辨垚鍔熶簡銆?/p>

濡傛灉紕板埌濡備笅閿欒錛屾槸鍥犱負緋葷粺鎵句笉鍒癰oost_python鐨刣ll銆傚己鐑堝緩璁妸浠栦滑閮芥墧鍒皊ystem32涓嬶紒銆?/p>

>>> import hello

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import hello
ImportError: DLL load failed: 鎵句笉鍒版寚瀹氱殑妯″潡銆?br>>>>


璇存槑錛宧ello.cpp鍦╞oost\boost_1_34_0\libs\python\example\tutorial鐩綍涓嬨傞噷闈㈢殑鍐呭鏄細

//  Copyright Joel de Guzman 2002-2004. Distributed under the Boost
//  Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt
//  or copy at http://www.boost.org/LICENSE_1_0.txt)
//  Hello World Example from the tutorial
//  [Joel de Guzman 10/9/2002]

char const* greet()
{
   return "hello, world";
}

#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace boost::python;

BOOST_PYTHON_MODULE(hello)
{
    def("greet", greet);
}


鍏朵腑
BOOST_PYTHON_MODULE(hello)
{
    def("greet", greet);
}
鏄greet浠巆++鍚憄ython鐨勪竴涓皝瑁呭0鏄庡惂錛岃鎹㈠氨浜ょ粰boost浜嗐?/p>

 

鍏堝啓鍒拌繖閲屼簡銆備笅嬈″啀鍐欍傘傚棷



kk 2007-06-01 10:32 鍙戣〃璇勮
]]>
c++涓祵鍏ython鍏ラ棬3http://www.shnenglu.com/jacky2019/archive/2007/05/17/24286.htmlkkkkThu, 17 May 2007 07:16:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/05/17/24286.htmlhttp://www.shnenglu.com/jacky2019/comments/24286.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/05/17/24286.html#Feedback3http://www.shnenglu.com/jacky2019/comments/commentRss/24286.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/24286.html榪欐涓昏璁茶鎬庝箞鎶妏ython涓殑class宓屽叆鍒癱++涓幓銆?br>欏轟究璁茶鍏冪粍鐨勬搷浣滃拰鎬庝箞緙栬瘧python婧愪唬鐮併?/p>

1. 棣栧厛璁茶鍏冪粍鐨勬搷浣?br>鐢變簬鍙傛暟鏄氳繃鍏冪粍浼犺繘鍘葷殑錛屾墍浠ユ垜浠笉鑳借佹槸閫氳繃Py_BuildValue榪欎釜鍑芥暟鏉ユ搷浣滃厓緇勶紝閭f牱澶笉鏂逛究浜嗐?br>Python鎻愪緵浜嗗厓緇勭浉鍏崇殑鎿嶄綔錛屼笅闈㈣繖涓緥瀛愭紨紺轟簡濡備綍鎿嶄綔銆備富瑕佹槸涓嬮潰鍑犱釜鍑芥暟錛?br>//new涓涓厓緇勶紝浼犲叆size
pArgs = PyTuple_New(argc - 3); 
//set鍏冪粍鐨勭洿錛岀涓涓負鍏冪粍錛岀浜屼釜涓篿ndex錛堜粠0寮濮嬶級錛岀涓変釜涓簐alue
PyTuple_SetItem(pArgs,0,Py_BuildValue("i",2000) );
PyTuple_SetItem(pArgs,1,Py_BuildValue("i",8) );

鏉ヨ嚜python doc鐨勪竴涓緥瀛?/p>

#include <Python.h>
int
main(int argc, char *argv[])
{
    PyObject *pName, *pModule, *pDict, *pFunc;
    PyObject *pArgs, *pValue;
    int i;

    if (argc < 3) {
        fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
        return 1;
    }

    Py_Initialize();
    pName = PyString_FromString(argv[1]);
    /* Error checking of pName left out */

    pModule = PyImport_Import(pName);
    Py_DECREF(pName);

    if (pModule != NULL) {
        pFunc = PyObject_GetAttrString(pModule, argv[2]);
        /* pFunc is a new reference */

        if (pFunc && PyCallable_Check(pFunc)) {
            pArgs = PyTuple_New(argc - 3);
            for (i = 0; i < argc - 3; ++i) {
                pValue = PyInt_FromLong(atoi(argv[i + 3]));
                if (!pValue) {
                    Py_DECREF(pArgs);
                    Py_DECREF(pModule);
                    fprintf(stderr, "Cannot convert argument\n");
                    return 1;
                }
                /* pValue reference stolen here: */
                PyTuple_SetItem(pArgs, i, pValue);
            }
            pValue = PyObject_CallObject(pFunc, pArgs);
            Py_DECREF(pArgs);
            if (pValue != NULL) {
                printf("Result of call: %ld\n", PyInt_AsLong(pValue));
                Py_DECREF(pValue);
            }
            else {
                Py_DECREF(pFunc);
                Py_DECREF(pModule);
                PyErr_Print();
                fprintf(stderr,"Call failed\n");
                return 1;
            }
        }
        else {
            if (PyErr_Occurred())
                PyErr_Print();
            fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]);
        }
        Py_XDECREF(pFunc);
        Py_DECREF(pModule);
    }
    else {
        PyErr_Print();
        fprintf(stderr, "Failed to load \"%s\"\n", argv[1]);
        return 1;
    }
    Py_Finalize();
    return 0;
}


2. class鎿嶄綔
鎶婁笅闈㈠姞鍏ュ埌test2.py涓幓銆傚畾涔変簡涓涓緢綆鍗曠殑綾伙紝鏈変竴涓猲ame鎴愬憳鍙橀噺錛屼竴涓猵rintName鎴愬憳鍑芥暟
class TestClass:
    def __init__(self,name):
        self.name = name

    def printName(self):
        print self.name

cpp鏂囦歡
#include <python.h>
int main()
{
 Py_Initialize();

 PyObject * pModule = NULL;
 PyObject * pFunc   = NULL;
 PyObject * pArg    = NULL;
 PyObject * pClass  = NULL;
 PyObject * pObject = NULL;

 pModule = PyImport_ImportModule("test2");
 pClass  = PyObject_GetAttrString(pModule, "TestClass");//寰楀埌閭d釜綾?br> pArg = PyTuple_New(1);
 PyTuple_SetItem(pArg, 0, Py_BuildValue("s", "Jacky"));
 pObject = PyEval_CallObject(pClass, pArg);//鐢熸垚涓涓璞★紝鎴栬呭彨浣滃疄渚?/p>

 pFunc = PyObject_GetAttrString(pObject, "printName");//寰楀埌璇ュ疄渚嬬殑鎴愬憳鍑芥暟
 PyEval_CallObject(pFunc, NULL);//鎵ц璇ュ疄渚嬬殑鎴愬憳鍑芥暟

 Py_Finalize();

 return 0;
}


娌℃湁浠涔堣祫鏂欙紝灝卞厛鍐欏埌榪欓噷浜嗐備笅闈粙緇嶄竴涓嬫庝箞build python25鐨勬簮浠g爜

3. 緙栬瘧python婧愪唬鐮?br>涓轟粈涔堣緙栬瘧鍛紵鍥犱負娌℃湁python25_d.lib錛佸懙鍛點傞『渚垮彲浠ヤ簡瑙d竴涓嬩唬鐮佺粨鏋勩?br>瑙e帇緙╁悗錛屾湁濂藉鐩綍錛屽叾涓璸cbuild鍜宲cbuild8鏄垜浠鐨勩俻cbuild瀵瑰簲鐫vc7.1鐨?pcbuild8瀵瑰簲鐫vc8.0鐨?br>鍥犱負鍦ㄧ敤vc7.1錛屼篃灝辨槸2003浜嗐傛墍浠ユ垜灝辮璇存庝箞鐢?003鏉ョ紪璇戝惂銆備簨瀹炰笂鏄粠涓浣嶇墰浜洪偅閲屽鏉ョ殑

http://blog.donews.com/lemur/archive/2005/12/17/660973.aspx錛岄偅浣嶅ぇ鍝ュぇ姒備竴騫村崐鍓嶅氨鍦ㄨВ鍓杙ython浜嗭紝鍘夊

闃褲傜湅鏉ユ垜鍙兘鍚庢潵灞呬笂浜嗭紝濞冨搱鍝堛傛垜鎸夌収浠栬鐨勮瘯浜嗕竴涓嬶紝緙栬瘧鎴愬姛錛?/p>

涓嶈繃閬囧埌涓鐐瑰皬闂錛岀敤vc2003鎵撳紑閭d釜solution鐨勬椂鍊欙紝鍙戠幇浣滆呮病鏈夋妸source code control鍘繪帀錛岄儊闂鳳紒瀹崇殑鎴?/p>

浠墦寮鐨勬椂鍊欎竴鍫唌essagebox銆備笉榪囦笉鐢ㄧ瀹冨氨濂戒簡錛屼竴鐩寸‘瀹氥傛渶鍚庤瘯浜嗕竴涓嬮偅涓猵ython25_d.lib錛屾病闂銆備笉榪囪

寰楁妸python25_d.dll copy鍒頒竴涓兘琚壘鍒扮殑鐩綍錛屾瘮濡傝c:\windows\system32\涓嬮潰銆俻ython25.dll涔熷湪榪欎釜鐩綍涓?/p>

闈€俹ver銆傛仼銆?/p>

 



kk 2007-05-17 15:16 鍙戣〃璇勮
]]>
c++涓祵鍏ython鍏ラ棬2http://www.shnenglu.com/jacky2019/archive/2007/05/17/24276.htmlkkkkThu, 17 May 2007 03:28:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/05/17/24276.htmlhttp://www.shnenglu.com/jacky2019/comments/24276.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/05/17/24276.html#Feedback0http://www.shnenglu.com/jacky2019/comments/commentRss/24276.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/24276.html1. 涓涓湁涓涓弬鏁扮殑渚嬪瓙

python鏂囦歡
#Filename test2.py

def Hello(s):
    print "Hello, world!"
    print s

cpp鏂囦歡
#include <python.h>
int main()
{
 Py_Initialize();

 PyObject * pModule = NULL;
 PyObject * pFunc   = NULL;
 PyObject * pArg    = NULL;

 pModule = PyImport_ImportModule("test2");
 pFunc   = PyObject_GetAttrString(pModule, "Hello");
 pArg    = Py_BuildValue("(s)", "function with argument");

 PyEval_CallObject(pFunc, pArg);

 Py_Finalize();

 return 0;
}

娉ㄦ剰錛屽弬鏁拌浠uple鍏冪粍褰㈠紡浼犲叆銆傚洜涓鴻繖涓嚱鏁板彧瑕佷竴涓弬鏁幫紝鎵浠ユ垜浠洿鎺ヤ嬌鐢?s)鏋勯犱竴涓厓緇勪簡銆?/p>

2. 涓涓湁涓や釜鍙傛暟鐨勪緥瀛?/p>

python鏂囦歡涓姞鍏ヤ互涓嬩唬鐮侊紝涓涓姞鍑芥暟
def Add(a, b):
    print "a+b=", a+b

cpp鏂囦歡錛屽彧鏀逛簡涓よ錛屾湁娉ㄩ噴鐨勯偅涓よ
#include <python.h>
int main()
{
 Py_Initialize();

 PyObject * pModule = NULL;
 PyObject * pFunc   = NULL;
 PyObject * pArg    = NULL;

 pModule = PyImport_ImportModule("test2");
 pFunc   = PyObject_GetAttrString(pModule, "Add");//緇堜簬鍛婂埆hello world浜嗭紝寮濮嬩嬌鐢ㄦ柊鐨勫嚱鏁?br> pArg    = Py_BuildValue("(i,i)", 10, 15);//鏋勯犱竴涓厓緇?/p>

 PyEval_CallObject(pFunc, pArg);

 Py_Finalize();

 return 0;
}

鍏跺畠鐨勫氨綾諱技浜嗐傘傘傚熀鏈笂錛屾垜浠煡閬撲簡鎬庝箞鍦╟++涓嬌鐢╬ython涓殑鍑芥暟銆傛帴涓嬫潵瀛︿範涓涓嬪浣曚嬌鐢╬ython涓殑

class銆?/p>

闄勶細Py_BuildValue鐨勪嬌鐢ㄤ緥瀛愶紝鏉ヨ嚜python documentation錛?/p>

    Py_BuildValue("")                        None
    Py_BuildValue("i", 123)                  123
    Py_BuildValue("iii", 123, 456, 789)      (123, 456, 789)
    Py_BuildValue("s", "hello")              'hello'
    Py_BuildValue("ss", "hello", "world")    ('hello', 'world')
    Py_BuildValue("s#", "hello", 4)          'hell'
    Py_BuildValue("()")                      ()
    Py_BuildValue("(i)", 123)                (123,)
    Py_BuildValue("(ii)", 123, 456)          (123, 456)
    Py_BuildValue("(i,i)", 123, 456)         (123, 456)
    Py_BuildValue("[i,i]", 123, 456)         [123, 456]
    Py_BuildValue("{s:i,s:i}",
                  "abc", 123, "def", 456)    {'abc': 123, 'def': 456}
    Py_BuildValue("((ii)(ii)) (ii)",
                  1, 2, 3, 4, 5, 6)          (((1, 2), (3, 4)), (5, 6))



kk 2007-05-17 11:28 鍙戣〃璇勮
]]>
c++涓祵鍏ython鍏ラ棬1http://www.shnenglu.com/jacky2019/archive/2007/05/17/24269.htmlkkkkThu, 17 May 2007 03:03:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/05/17/24269.htmlhttp://www.shnenglu.com/jacky2019/comments/24269.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/05/17/24269.html#Feedback3http://www.shnenglu.com/jacky2019/comments/commentRss/24269.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/24269.html鏈漢鏄敤vc2003+python2.5瀛︿範鐨勶紝鍏跺畠鐨勪篃搴旇宸笉浜嗗灝?/p>

0. 鍧忓璁劇疆
鎶妏ython鐨刬nclude/libs鐩綍鍒嗗埆鍔犲埌vc鐨刬nclude/lib directories涓幓銆傚彟澶栵紝鐢變簬python娌℃湁鎻愪緵debug lib錛屼綋鍦拌錛屽氨鏄病鏈夋彁渚沺ython25_d.lib浜嗐備綘鍙互鑷繁緙栬瘧python鐨勬簮浠g爜鏉ュ緱鍒皃ython25_d.lib鐨勶紝鍋惰繕娌¤瘯榪囷紝鍛靛懙銆傝屼笖緗戜笂鎵句簡涓涓嬩篃娌′笅杞藉埌銆傛墍浠ワ紝濡傛灉浣犳兂瑕佸湪debug涓嬭繍琛岀▼搴忕殑璇濓紝浣犺鎶妏yconfig.h錛堝湪python25/include/鐩綍涓嬶級鐨勫ぇ姒傛槸鍦?83琛岋紝鎶妏ragma comment(lib,"python25_d.lib")鏀規垚pragma comment(lib,"python25.lib")錛岃python閮戒嬌鐢ㄩ潪debug lib.

1. 寮濮嬬紪紼嬩簡
#include <python.h>
絎竴姝ュ氨鏄寘鍚玴ython鐨勫ご鏂囦歡

2. 鐪嬩竴涓緢綆鍗曠殑渚嬪瓙
1)python鏂囦歡test.py錛屽緢綆鍗曠殑瀹氫箟浜嗕竴涓嚱鏁?/p>

#Filename test.py
def Hello():
    print "Hello, world!"

榪欎釜搴旇鑳界湅鎳傜殑鍚э紵鍚﹀垯鐨勮瘽錛屽洖鍘誨啀緇冪粌python鍚э紝鍛靛懙銆傘婄畝鏄嶱ython鏁欑▼銆婼waroop, C. H. 钁椼傛矆媧佸厓  璇戙?/p>


2)cpp鏂囦歡

#include <python.h> //鍖呭惈澶存枃浠訛紝鍦╟++涓祵鍏ython錛岃繖鏄繀欏葷殑
int main()
{
 Py_Initialize();

 PyObject * pModule = NULL;
 PyObject * pFunc   = NULL;

 pModule = PyImport_ImportModule("test");
 pFunc   = PyObject_GetAttrString(pModule, "Hello");
 PyEval_CallObject(pFunc, NULL);

 Py_Finalize();

 return 0;
}

絎竴姝ヨ繕鏄寘鍚ご鏂囦歡

絎簩姝ワ紝浣跨敤python涔嬪墠錛岃璋冪敤Py_Initialize();榪欎釜鍑芥暟榪涜鍒濆鍖栥?br>甯姪鏂囨。涓鏄錛?br>The basic initialization function is Py_Initialize(). This initializes the table of loaded modules, and creates the fundamental modules __builtin__, __main__, sys, and exceptions. It also initializes the module search path (sys.path).

鍙嶆錛屼竴寮濮嬩綘涓瀹氳璋冪敤銆?/p>

絎笁姝ワ紝澹版槑涓浜汸ython鐨勫彉閲忥紝PyObject綾誨瀷鐨勩傚叾瀹炲0鏄庝篃鍙斁鍦ㄥ墠闈紝榪欎釜鍊掓槸鏃犳墍璋撶殑銆?/p>

絎洓姝ワ紝import module錛屼篃灝辨槸浣犵殑鑴氭湰鍚嶅瓧錛屼笉闇瑕佸姞鍚庣紑鍚嶏紝鍚﹀垯浼氬嚭閿欑殑銆?/p>

絎簲姝ワ紝浠庝綘import榪涙潵鐨刴odule涓緱鍒頒綘瑕佺殑鍑芥暟
 pFunc   = PyObject_GetAttrString(pModule, "Hello");
涓婇潰鐨勪緥瀛愬凡緇忓娓呮鐨勪簡錛屾渶鍚庝竴涓槸浣犺寰楀埌鐨勫嚱鏁扮殑鍚嶅瓧

絎叚姝ワ紝璋冪敤PyEval_CallObject鏉ユ墽琛屼綘鐨勫嚱鏁幫紝絎簩涓弬鏁頒負鎴戜滑瑕佽皟鐢ㄧ殑鍑芥暟鐨勫嚱鏁幫紝鏈緥瀛愪笉鍚弬鏁幫紝鎵浠ヨ緗負NULL銆?/p>

絎竷姝ワ紝璋冪敤Py_Finalize錛岃繖涓牴Py_Initialize鐩稿搴旂殑銆備竴涓湪鏈鍓嶉潰錛屼竴涓湪鏈鍚庨潰銆?/p>

 

絎竴嬈″啓鏁欑▼銆傝繖涓緥瀛愰潪甯哥畝鍗曪紝鏈漢涔熻繕鍦ㄥ涔犲綋涓樋錛屽彧鑳戒繚璇佸ぇ瀹惰兘澶熸妸榪欎釜渚嬪瓙榪愯璧鋒潵銆傚緩璁ぇ瀹跺幓鐪媝ython鐨刣ocumentaion錛岄噷闈㈡湁璁叉庝箞embedding python鐨勩傚厛鍐欏埌榪欓噷錛屽叾瀹炵洰鍓嶄篃鍙鍒拌繖涔堝錛屽懙鍛點備笅嬈″浜嗘洿澶氫互鍚庡啀鍐欍侽ver銆傛仼銆?/p>

 



kk 2007-05-17 11:03 鍙戣〃璇勮
]]>
璁よ瘑鐞嗚Вvolatile鍏抽敭瀛?/title><link>http://www.shnenglu.com/jacky2019/archive/2007/04/04/21233.html</link><dc:creator>kk</dc:creator><author>kk</author><pubDate>Wed, 04 Apr 2007 06:15:00 GMT</pubDate><guid>http://www.shnenglu.com/jacky2019/archive/2007/04/04/21233.html</guid><wfw:comment>http://www.shnenglu.com/jacky2019/comments/21233.html</wfw:comment><comments>http://www.shnenglu.com/jacky2019/archive/2007/04/04/21233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jacky2019/comments/commentRss/21233.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jacky2019/services/trackbacks/21233.html</trackback:ping><description><![CDATA[<span>榪欎釜鍏抽敭瀛楀憡璇夌紪璇戝櫒涓嶈鎸佹湁鍙橀噺鐨勪復鏃舵ф嫹璐濄傚畠鍙互閫傜敤浜庡熀紜綾誨瀷錛屽</span>int<span>鎴?/span>long<span>錛屼篃閫傜敤浜庝竴鏁翠釜</span>c<span>緇撴瀯鎴?/span>c++<span>綾匯?/span> <p><span>涓轟粈涔堣鏈夎繖涓叧閿瓧鍛紵鍥犱負緙栬瘧鍣ㄥ湪浼樺寲鐨勬椂鍊欙紝浼氭妸甯哥敤鍒扮殑鏁版嵁鏀懼湪</span>CPU<span>鐨勫唴閮ㄥ瘎瀛樺櫒涓傛暟鎹粠瀵勫瓨鍣ㄤ腑璇誨彇錛岃繙姣斾粠鍐呭瓨涓鍙栬蹇紒浣嗘槸錛屽鏋滃彟涓涓嚎紼嬫敼鍙樹簡鍐呭瓨涓殑鍙橀噺鍊鹼紝閭d箞姝ゅ彉閲忓湪瀵勫瓨鍣ㄤ腑鐨勫煎氨榪囨湡浜嗐?/span></p> <script type=text/javascript> <!-- google_ad_client = "pub-6457474891690507"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text_image"; google_ad_channel = ""; //--> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script> <!-- Search Google --> <center> <form action=http://www.google.cn/custom method=get target=_top> <table bgColor=#ffffff> <tbody> <tr> <td vAlign=top noWrap align=left height=32><a ><img alt=Google src="http://www.google.com/logos/Logo_25wht.gif" align=middle border=0> </a><label style="DISPLAY: none" for=sbi>杈撳叆鎮ㄧ殑鎼滅儲瀛楄瘝</label> <input id=sbi maxLength=255 size=31 name=q> <label style="DISPLAY: none" for=sbb>鎻愪氦鎼滅儲琛ㄥ崟</label> <input id=sbb type=submit value=鎼滅儲 name=sa> <input type=hidden value=pub-6457474891690507 name=client> <input type=hidden value=1 name=forid> <input type=hidden value=GB2312 name=ie> <input type=hidden value=GB2312 name=oe> <input type=hidden value=GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1 name=cof> <input type=hidden value=zh-CN name=hl> </td></tr></tbody></table></form></center><!-- Search Google --><img src ="http://www.shnenglu.com/jacky2019/aggbug/21233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jacky2019/" target="_blank">kk</a> 2007-04-04 14:15 <a href="http://www.shnenglu.com/jacky2019/archive/2007/04/04/21233.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>閾炬帴鍣ㄩ兘騫蹭簡浜涗粈涔堬紵http://www.shnenglu.com/jacky2019/archive/2007/03/29/20891.htmlkkkkThu, 29 Mar 2007 11:10:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/03/29/20891.htmlhttp://www.shnenglu.com/jacky2019/comments/20891.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/03/29/20891.html#Feedback0http://www.shnenglu.com/jacky2019/comments/commentRss/20891.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/20891.html闃呰鍏ㄦ枃

kk 2007-03-29 19:10 鍙戣〃璇勮
]]>
C++緙栬瘧閫夐」瀛︿範http://www.shnenglu.com/jacky2019/archive/2007/03/20/20176.htmlkkkkMon, 19 Mar 2007 16:42:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/03/20/20176.htmlhttp://www.shnenglu.com/jacky2019/comments/20176.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/03/20/20176.html#Feedback0http://www.shnenglu.com/jacky2019/comments/commentRss/20176.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/20176.html 1銆?/span> 濡備綍鍒ゆ柇鏄?/span> 32 浣嶇殑榪樻槸 64 浣嶇殑

/* Find the arch type */
#if defined(__x86_64__) || defined(_M_X64)
#聽
璇存槑鏄?/span> 64 浣嶇殑
#else
#聽
璇存槑鏄?/span> 32 浣嶇殑

2銆?/span> 濡備綍鍒ゆ柇浣跨敤鐨勬槸浠涔堢紪璇戝櫒

#if defined( _MSC_VER )
#聽聽
璇存槑鏄井杞殑 vc 緙栬瘧鍣?/span>
#elif defined( __GNUC__ )
#聽聽
璇存槑鏄?/span> GNU 鐨?/span>
#elif defined( __BORLANDC__ )
#聽聽
璇存槑鏄?/span> borland 鐨?/span>



kk 2007-03-20 00:42 鍙戣〃璇勮
]]>
鍐嶆鎺㈣鍙屽垎媧綿ouble dispatchhttp://www.shnenglu.com/jacky2019/archive/2007/03/13/19755.htmlkkkkTue, 13 Mar 2007 08:02:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/03/13/19755.htmlhttp://www.shnenglu.com/jacky2019/comments/19755.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/03/13/19755.html#Feedback2http://www.shnenglu.com/jacky2019/comments/commentRss/19755.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/19755.html鍙戠幇鎴戣嚜宸辨妸澶氬垎媧劇粰鎼炲鏉備簡錛佸叾瀹炲弻鍒嗘淳榪欎釜姒傚康涔熸槸浠庡visitor妯″紡鐪嬪埌鐨勶紝鍏舵剰涔夊湪浜庢帴鍙楄呭拰鍙傛暟閮借兘鍦ㄨ繍琛屾椂鍐沖畾瀹冪殑綾誨瀷錛屼絾鏄痗++鍙敮鎸佸崟鍒嗘淳錛屼篃灝辨槸璇村弬鏁扮殑綾誨瀷灝嗗湪緙栬瘧闃舵鍐沖畾銆傛墍浠ュ叾瀹炴兂瑕佹紨紺轟竴涓嬭繖涓棶棰樼殑璇濓紝鍏跺疄錛屾槸闈炲父綆鍗曠殑錛佸涓嬶細
///////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;

class BE;

//B
class B
{
public:
聽void virtual output(B * b){cout << "B:B" << endl;}
聽void virtual output(BE * be){cout << "B:BE" << endl;}
};
class BE : public B
{
public:
聽void output(B * b){cout << "BE:B" << endl;}
聽void output(BE * be){cout << "BE:BE" << endl;}
};

int main()
{
聽聽聽 B * p1 = new BE;
聽聽聽 B * p2 = new BE;
聽聽聽 p1->output(p2);

聽return 0;
}
///////////////////////////////////////////////////////////////////
濡傛灉鍙傛暟鑳藉鍦ㄨ繍琛屾椂鍐沖畾綾誨瀷鐨勮瘽錛岄偅涔堣緭鍑烘潵鐨勪俊鎭簲璇ユ槸BE:BE錛屽洜涓簆2鐨勫疄闄呯被鍨嬫槸BE銆備絾鏄紝浜嬪疄涓婅緭鍑烘潵鐨勭粨鏋滄槸BE:B銆備篃灝辨槸璇磒2鐨勭被鍨嬭璇В涓築浜嗭紒榪欏氨鏄棶棰樼殑鎵鍦ㄤ簡銆?br />鎶婄畝鍗曠殑浜嬫儏鎼炲鏉備簡錛岄偅鐪熸槸鎶樿吘鍟婏紝鍛靛懙銆?br />Over銆?br />



kk 2007-03-13 16:02 鍙戣〃璇勮
]]>
c++鍙敮鎸佸崟鍒嗘淳(single dispatch) 鎺㈣2http://www.shnenglu.com/jacky2019/archive/2007/03/13/19704.htmlkkkkTue, 13 Mar 2007 03:36:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/03/13/19704.htmlhttp://www.shnenglu.com/jacky2019/comments/19704.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/03/13/19704.html#Feedback2http://www.shnenglu.com/jacky2019/comments/commentRss/19704.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/19704.html涓嬮潰婕旂ず浜嗕竴涓媍++涓嶆敮鎸佸弻鍒嗘淳銆備竴鍏辨湁鍥涘悇綾伙紝A, AD, B, BE, 鍏朵腑AD鏄疉鐨勫瓙綾伙紝BE鏄疊鐨勫瓙綾匯備粬浠兘鏈変竴涓彨output鐨勫嚱鏁幫紙鍑芥暟鍚嶄笉涓瀹氳涓鏍風殑錛夈傞棶棰樺嚭鐜板湪鍝噷鍛紵闂鍑虹幇鍦ˋ鎴朅D綾諱腑output鍑芥暟閲岀殑b->output(a);榪欎釜璇彞銆傚叾涓璪鏄兘澶熷姩鎬乼rack鍒頒粬鑷繁鐨勭被鍨嬬殑錛屼絾鏄痑灝變笉琛屼簡錛佸洜涓哄畠宸茬粡琚潤鎬佺粦瀹氬埌A綾誨瀷浜嗭紝鎵浠ヨ緭鍑虹粨鏋滄槸錛?br />output淇℃伅錛?br />///////////////////////////////
AD:BE
BE:A //濡傛灉姝g‘鐨勮瘽錛岃繖閲屽簲璇ヨ緭鍑築E:AD
AD:B
B:A聽 //濡傛灉姝g‘鐨勮瘽錛岃繖閲屽簲璇ヨ緭鍑築:AD

AD:BE
BE:A
A:B
B:A

///////////////////////////////
鐜板湪鎶婃帴鍙f敼鎴怉D*a, 鏄劇ず鍑洪敊淇℃伅錛?br />error: invalid conversion from `A*' to `AD*'
///////////////////////////////

鐜板湪鎶奲->output(a)鏀規垚b->output(this)錛岃緭鍑虹粨鏋滃涓嬶細
AD:BE
BE:AD
AD:B
B:AD

AD:BE
BE:A
A:B
B:A
///////////////////////////////
緇撴灉灝辨紜簡錛佸洜涓簍his鏄劇劧宸茬粡鎸囧悜浜嗘紜殑綾誨瀷錛岃屼笖涔熸病鏈夌粡榪囦腑闂存楠ゅ湴杞崲錛屾墍浠ュ叾淇℃伅榪樻槸鑳藉runtime鎵懼埌鐨勩?br />over銆?br />
涓嶇煡涓婇潰鐨勮В閲婃槸鍚︽紜紝濡傛灉鏈夐棶棰橈紝璇峰悇浣嶉珮鎵嬭祼鏁欎簡銆傚皬寮熷厛璋㈣阿浜嗐?br />


浠g爜濡備笅錛?br />////////////////////////////////////
#include <iostream>
#include <list>
using namespace std;

class A;
class AD;
//B
class B
{
public:
聽void virtual output(A * a){cout << "B:A" << endl;}
聽void virtual output(AD * ad){cout << "B:AD" << endl;}
};
class BE : public B
{
public:
聽void output(A * a){cout << "BE:A" << endl;}
聽void output(AD * ad){cout << "BE:AD" << endl;}
};

//A
class A
{
public:
聽void virtual output(B * b, A * a){cout << "A:B" << endl;b->output(a);}
聽void virtual output(BE * b, A * a){cout << "A:BE" << endl;b->output(a);}
};
class AD : public A
{
public:
聽void output(B * b, A * a){cout << "AD:B" << endl;b->output(a);}
聽void output(BE * b, A * a){cout << "AD:BE" << endl;b->output(a);}
};

int main()
{
聽聽聽 A * pAD = new AD;
聽聽聽 pAD->output(new BE, pAD);
聽聽聽 pAD->output(new B, pAD);

cout<<endl;

聽聽聽 A * pA = new A;
聽聽聽 pA->output(new BE, pA);
聽聽聽 pA->output(new B, pA);

聽return 0;
}



kk 2007-03-13 11:36 鍙戣〃璇勮
]]>
c++鍙敮鎸佸崟鍒嗘淳(single dispatch)http://www.shnenglu.com/jacky2019/archive/2007/03/09/19476.htmlkkkkFri, 09 Mar 2007 02:36:00 GMThttp://www.shnenglu.com/jacky2019/archive/2007/03/09/19476.htmlhttp://www.shnenglu.com/jacky2019/comments/19476.htmlhttp://www.shnenglu.com/jacky2019/archive/2007/03/09/19476.html#Feedback5http://www.shnenglu.com/jacky2019/comments/commentRss/19476.htmlhttp://www.shnenglu.com/jacky2019/services/trackbacks/19476.html
絎笁涓増鏈簡錛佸眳鐒舵湁鎼為敊浜嗐傚師鏈互涓哄凡緇忕悊瑙d簡澶氬垎媧撅紝鍐欏嚭鏉ヤ互鍚庢墠鐭ラ亾闂閭d箞澶氾紒鎵浠ヨ瑕佸瀹炶返錛屽鍜岄珮鎵嬭璁鴻璁洪樋銆?br />濡傛灉榪樻湁闂錛岃澶у涓嶅悵璧愭暀銆傝阿璋㈠搱錛?br />#include <iostream>
#include <list>
using namespace std;
//B
class B
{
};
class BE : public B
{
};
//A
class A
{
public:
聽void virtual output(B * b){cout << "A:B" << endl;}
聽void virtual output(BE * b){cout << "A:BE" << endl;}
};
class AD : public A
{
public:
聽void output(B * b){cout << "AD:B" << endl;}
聽void output(BE * b){cout << "AD:BE" << endl;}
};
int main()
{
聽A * pA = new AD;
聽pA->output(new BE);
聽list<B*> * listb = new list<B*>();
聽listb->push_back(new BE);
聽pA->output(listb->back());

聽return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
浠ヤ笅鏈夐棶棰橈紒錛?/font>
灞呯劧鍐欓敊浜嗭紒鍝堝搱銆傝阿璋㈠悇浣嶅ぇ鍝ョ殑璇勮闃褲傝繖涓唬鐮佹槸鎴戜互鍓嶅啓鐨勶紝鎴戣繕浠ヤ負鏄紜殑銆傘傘傛檿浜嗐傚搱鍝?br />涓嬮潰鐨勪唬鐮佹槸鏀硅繃浠ュ悗鐨勶紝涓嶇煡閬撹繕鏈夋病鏈夐棶棰橈紵甯屾湜鍚勪綅澶氭彁鎰忚鍝?br />#include <iostream>
using namespace std;
//B
class B
{
public:
聽virtual void print()
聽{cout << "B" << endl;}
};
class BE : public B
{
public:
聽void print()
聽{cout << "BE" << endl;}
聽void print(int i)
聽{cout << "BE:" << i << endl;}
};

//A
class A
{
public:
聽void output(int i)
聽{
聽聽聽 聽B * b = new B;
聽聽聽 聽B * be = new BE;
聽聽聽 聽b->print();
聽聽聽 聽be->print();
聽聽聽 聽be->print(i);//闂鍑虹幇鍦ㄨ繖閲岋紒錛侊紒濡傛敼涓?(BE*)be)->print(i)灝監K浜嗐?br />聽}
};

int main()
{
聽A a;
聽a.output(99);

聽return 0;
}

--------------------Configuration: test - Debug--------------------
Compiling source file(s)...
test.cpp
test.cpp: In member function `void A::output(int)':
test.cpp:29: error: no matching function for call to `B::print(int&)'
test.cpp:8: note: candidates are: virtual void B::print()

test.exe - 2 error(s), 0 warning(s)




//////////////////////////////////////////////////////////////////////////////////////////////////////
浠ヤ笅浠g爜鏈夐棶棰橈紒
//////////////////////////////////////////////////////////////////////////////////////////////////////
c++涓嶆敮鎸佸弻鍒嗘淳(double dispatch)鍜屽鍒嗘淳(multi-dispatch)錛屽彧鏀寔鍗曞垎媧?single dispatch)銆備竴涓吀鍨嬬殑涓嶆敮鎸佸弻鍒嗘淳鐨勪緥瀛愬涓嬫墍紺猴細
#include <iostream>
using namespace std;
class B
{
public:
聽virtual void print()
聽{cout << "c" << endl;}
};
class E1 : public B
{
public:
聽void print()
聽{cout << "E1" << endl;}
};
class E2 : public B
{
public:
聽void print()
聽{cout << "E2" << endl;}
};
class A
{
public:
聽virtual void output(B* p)
聽{cout << "A" << endl;p->print();}
};
class D1 : public A
{
public:
聽void output(B* p)
聽{cout << "D1" << endl;p->print();}
};
class D2 : public A
{
public:
聽void output(B* p)
聽{cout << "D2" << endl;p->print();}
};
void f(A* p, B* q)
{
聽p->output(q);
}
int main()
{
聽A * pd1 = new D1;
聽B * pe1 = new E1;

聽f(pd1, pe1);

聽end:
聽int end;
聽cin >> end;
聽return 0;
}


kk 2007-03-09 10:36 鍙戣〃璇勮
]]>
国产成人久久精品一区二区三区| 国产精品女同久久久久电影院| 国产成人无码精品久久久免费| 麻豆精品久久精品色综合| 无码精品久久一区二区三区 | 9999国产精品欧美久久久久久| 丁香五月综合久久激情| 国产偷久久久精品专区| 国产一区二区精品久久岳| 一本色道久久88—综合亚洲精品| 久久久久久综合一区中文字幕| 亚洲国产成人久久精品99 | 久久嫩草影院免费看夜色| 亚洲女久久久噜噜噜熟女| 久久香蕉国产线看观看猫咪?v| 久久久婷婷五月亚洲97号色| 午夜精品久久影院蜜桃| 久久久久久久尹人综合网亚洲| 亚洲色欲久久久综合网| 亚洲日本va午夜中文字幕久久| 天天爽天天爽天天片a久久网| 亚洲综合伊人久久综合| 久久精品无码专区免费| 9191精品国产免费久久| 精品国产一区二区三区久久久狼| 精品久久久久久久久免费影院| 久久久99精品成人片中文字幕| 亚洲国产精品久久66| 99久久国产综合精品成人影院| 久久精品国产亚洲av日韩| 午夜人妻久久久久久久久| 香蕉久久夜色精品国产尤物| 青青热久久国产久精品 | 亚洲狠狠婷婷综合久久久久| 香蕉久久永久视频| 伊人久久国产免费观看视频| 亚洲精品tv久久久久| 久久91精品国产91| 一本一道久久综合狠狠老| 无码精品久久久天天影视| 亚洲第一极品精品无码久久|