??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久久亚洲Av无码精品专口 ,久久福利片,岛国搬运www久久http://www.shnenglu.com/nacci/被约束的日日夜夜Q停不下来的旉?/description>zh-cnWed, 07 May 2025 01:21:51 GMTWed, 07 May 2025 01:21:51 GMT60归来http://www.shnenglu.com/nacci/archive/2010/02/14/107732.htmlnaccinacciSun, 14 Feb 2010 13:00:00 GMThttp://www.shnenglu.com/nacci/archive/2010/02/14/107732.htmlhttp://www.shnenglu.com/nacci/comments/107732.htmlhttp://www.shnenglu.com/nacci/archive/2010/02/14/107732.html#Feedback0http://www.shnenglu.com/nacci/comments/commentRss/107732.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/107732.html距离上一博客,已经三年有余。值得庆幸的是Q现在自׃旧保持着对于底层技术知识的执着和热情,自己仍旧走在底层技术探索和研究的\上。尽已l越来越多的从事理工作Q我却一直都不断的提醒自己,技术是自己的灵,像我曾l因为技术取向上的与众不同而有了现在这份工作一栗?br>
q前QJeffrey找我谈过Q关于职业取向上的想法。仔l想了想Q我仍然惛_技术道路上走得更远Q在底层技术上走得更远。尽各U反面的x和现实摆在眼前,但是Q我希望自己始终能有一颗勇于创造的内心?br>
新的一q_自己要更加努力,q是让自ql写下去吧,让写作成ZU坚持,让学习成ZU习惯,让分享成ZU快乐,让责LZU现实?/p>

nacci 2010-02-14 21:00 发表评论
]]>
假如http://www.shnenglu.com/nacci/archive/2006/05/23/7541.htmlnaccinacciTue, 23 May 2006 12:01:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/23/7541.htmlhttp://www.shnenglu.com/nacci/comments/7541.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/23/7541.html#Feedback1http://www.shnenglu.com/nacci/comments/commentRss/7541.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7541.html 人是需要拿动和真诚来证明自已的,q去的得׃能用假如来挽回和补救,只能用h生中的现实和眼前的时光甚至以后一生的旉努力M?q是Z断进?不断向上所要付出的一U代仗 ?br />          所以我q是要说,不要在假如之后再假设有如?人生Ҏ(gu)没有假如Q ?br />          所以我要说,我在假如之后,都是在认真的Ҏ(gu)错误,以求自已更快更好地接q我自已心目中的完美! 


nacci 2006-05-23 20:01 发表评论
]]>
dhttp://www.shnenglu.com/nacci/archive/2006/05/23/7520.htmlnaccinacciMon, 22 May 2006 16:22:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/23/7520.htmlhttp://www.shnenglu.com/nacci/comments/7520.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/23/7520.html#Feedback1http://www.shnenglu.com/nacci/comments/commentRss/7520.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7520.html

DKP记录里我们辉煌的瞬间Q想起了以往的种U的感动Q尽这U感觉不能永d_却在我心里划上了一C痕?span lang="EN-US">

   

   

   

   

   

   

   


    很想再写Q却已无语,因ؓ心里真的承受不了q些回忆Q我很想像戒酒一h你戒掉,但我知道q是做不到的Q其实记忆会一直存在,所以请你要怿Q你一直在让我疼痛…?/span>

nacci 2006-05-23 00:22 发表评论
]]>
MFC漫谈Q五Q——消息的路由Q?Q?/title><link>http://www.shnenglu.com/nacci/archive/2006/05/19/7395.html</link><dc:creator>nacci</dc:creator><author>nacci</author><pubDate>Fri, 19 May 2006 01:08:00 GMT</pubDate><guid>http://www.shnenglu.com/nacci/archive/2006/05/19/7395.html</guid><wfw:comment>http://www.shnenglu.com/nacci/comments/7395.html</wfw:comment><comments>http://www.shnenglu.com/nacci/archive/2006/05/19/7395.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/nacci/comments/commentRss/7395.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/nacci/services/trackbacks/7395.html</trackback:ping><description><![CDATA[     摘要: l箋上一个主题直U上溯的消息上次说到消息被{发到了AfxWndProcQl? LRESULT CALLBACKAfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) {    // …   ?/ all other messages route through message map    CWnd* pWnd = CW...  <a href='http://www.shnenglu.com/nacci/archive/2006/05/19/7395.html'>阅读全文</a><img src ="http://www.shnenglu.com/nacci/aggbug/7395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/nacci/" target="_blank">nacci</a> 2006-05-19 09:08 <a href="http://www.shnenglu.com/nacci/archive/2006/05/19/7395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC漫谈Q四Q——消息的路由http://www.shnenglu.com/nacci/archive/2006/05/18/7365.htmlnaccinacciThu, 18 May 2006 09:29:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/18/7365.htmlhttp://www.shnenglu.com/nacci/comments/7365.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/18/7365.html#Feedback2http://www.shnenglu.com/nacci/comments/commentRss/7365.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7365.html有了消息映射表,如何利用呢?消息如何被分门别cȝz֏出去的?


用最基本的一句话概述Q钩子函数v了很大作用。故事是q样的,有些漫长Q也需要些耐心?br />
MFC中消息分?c:

 1. WM_COMMANDQ所有的UIlg和加速键都会产生q种消息Q所有派生于CCmdTarget的类都有能力处理该消?br /> 2. 标准消息Q除WM_COMMAND之外的WM_xx消息都是标准消息Q派生于CWnd的类都有能力处理该消?br /> 3. 控g通知消息Q用于子H口控g向父H口发送的消息

在MFC的消息映表的徏立中Q通过一l宏Q你可以让自己的类先于父类处理某些Windows消息Q这U行为很像虚函数Q只是我们重载的内容不是虚函敎ͼ而是消息?/font>

推动消息的܇

W一阶段 H口q程

在生一个窗口的时候,会调用CFrameWnd::CreateQ所有的故事也都从这里展开。下面的代码Zz,L了不相关的代?br />

BOOL CFrameWnd::Create(?  {
    
//  ?/span>

     if  ( ! CreateEx(?)  {
        
//  ?/span>

    }

    
//  ?/span>
}


BOOL CWnd::CreateEx(? 
{
    
//  ?/span>

    AfxHookWindowCreate( this );
    HWND hWnd 
=
 ::CreateWindowEx(?;
    
//  ?/span>

}


void  AFXAPI AfxHookWindowCreate(CWnd *  pWnd)  {
    
//  ?/span>

     if  (pThreadState -> m_hHookOldCbtFilter  ==  NULL)  {
        pThreadState
-> m_hHookOldCbtFilter  =
 ::SetWindowsHookEx(WH_CBT,
        _AfxCbtFilterHook, NULL, ::GetCurrentThreadId());
        
//  ?/span>

    }

    
//  ?/span>
    pThreadState -> m_pWndInit  =  pWnd;
}

q样Q通过AfxHookWindowCreateQ在当前U程中安装了一个钩子,用来拦截和窗口相关的事gQ每当:

1. 另一个窗口成为activeQ?br />2. 产生或摧毁一个窗?br />3. Minimize或maximize一个窗口;
4. Ud或羃放一个窗口;
5. 完成一个来自系l菜单的命oQ?br />6. 从系l队列中取出一个消息;

Ӟ都会先调用_AfxCbtFilterHookQ接下来看看钩子函数作了什么:

LRESULT CALLBACK
_AfxCbtFilterHook(
int  code, WPARAM wParam, LPARAM lParam) 
{
    
//  ?/span>

    WNDPROC afxWndProc  =  AfxGetAfxWndProc();
    oldWndProc 
=
 (WNDPROC)SetWindowLongPtr(hWnd, GWLP_WNDPROC,(DWORD_PTR)afxWndProc);
    
//  ?/span>

}


WNDPROC AFXAPI AfxGetAfxWndProc() 
{
    
//  ?/span>

     return   & AfxWndProc;
}

q样Q_AfxCbtFilterHook的工作ȝh是通过H口子类化,把新建的H口的窗口过E设|成AfxWndProc?br />到这里,我们l于扑ֈ了窗口过E?br />
l论
CFrameWnd::Create创徏H口调用CWnd::CreateEx
CWnd::CreateEx调用AfxHookWindowCreate准备为窗口设|钩?br />AfxHookWindowCreate调用::SetWindowHookEx为窗口设|了一个WH_CBTcd的钩子来qo消息Qƈ把过滤函数设|成_AfxCbtFilterHook
_AfxCbtFilterHook通过H口子类化设|窗口的H口q程为AfxWndProc
q样Q通过::DispatchMessage发送给H口的消息就会源源不断地送到AfxWndProc中来Q可以想刎ͼAfxWndProc利用MFC的消息映表Q分门别cȝҎ(gu)息进行分?br />
Q待l……)




nacci 2006-05-18 17:29 发表评论
]]>
MFC漫谈Q三Q——消息映?/title><link>http://www.shnenglu.com/nacci/archive/2006/05/18/7363.html</link><dc:creator>nacci</dc:creator><author>nacci</author><pubDate>Thu, 18 May 2006 08:31:00 GMT</pubDate><guid>http://www.shnenglu.com/nacci/archive/2006/05/18/7363.html</guid><wfw:comment>http://www.shnenglu.com/nacci/comments/7363.html</wfw:comment><comments>http://www.shnenglu.com/nacci/archive/2006/05/18/7363.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/nacci/comments/commentRss/7363.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/nacci/services/trackbacks/7363.html</trackback:ping><description><![CDATA[ <p> <font size="2">MFC中的消息循环呢?我们熟?zhn)的switch……case……到哪里MQ?br /></font> </p> <font size="2"> <hr /> <br />在MFC中,消息的@环ƈ不是用switch……case……实现的Q它依赖于一张由E序自n定义的消息网?br /><br />首先QMFC用一个名为AFX_MSGMAP_ENTRYl构来对消息的信息进行封装: </font> <p> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">struct</span> </font> <font size="2"> <span style="COLOR: #000000"> AFX_MSGMAP_ENTRY<br /><img id="Codehighlighter1_24_379_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_379_Open_Text.style.display='none'; Codehighlighter1_24_379_Closed_Image.style.display='inline'; Codehighlighter1_24_379_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_24_379_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_379_Closed_Text.style.display='none'; Codehighlighter1_24_379_Open_Image.style.display='inline'; Codehighlighter1_24_379_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span> <span id="Codehighlighter1_24_379_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> </font> <span id="Codehighlighter1_24_379_Open_Text"> <font size="2"> <span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />  UINT nMessage;   </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> windows message</span> </font> <span style="COLOR: #008000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /> </font> </span> <font size="2"> <span style="COLOR: #000000">  UINT nCode;       </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> control code or WM_NOTIFY code</span> </font> <span style="COLOR: #008000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /> </font> </span> <font size="2"> <span style="COLOR: #000000">  UINT nID;          </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> control ID (or 0 for windows messages)</span> </font> <span style="COLOR: #008000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /> </font> </span> <font size="2"> <span style="COLOR: #000000">  UINT nLastID;     </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> used for entries specifying a range of control id's</span> </font> <span style="COLOR: #008000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /> </font> </span> <font size="2"> <span style="COLOR: #000000">  UINT_PTR nSig;    </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> signature type (action) or pointer to message #</span> </font> <span style="COLOR: #008000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /> </font> </span> <font size="2"> <span style="COLOR: #000000">  AFX_PMSG pfn;    </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> routine to call (or special value)</span> </font> <span style="COLOR: #008000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </font> </span> <span style="COLOR: #000000"> <font size="2">}</font> </span> </span> <span style="COLOR: #000000"> <font size="2">;</font> </span> </div> <p> <font size="2">其中 typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);<br /><br />之后Q通过一个链表,把这些描q消息的l构l织hQ构成消息映表的结构是AFX_MSGMAP</font> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font size="2"> <img id="Codehighlighter1_18_87_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_87_Open_Text.style.display='none'; Codehighlighter1_18_87_Closed_Image.style.display='inline'; Codehighlighter1_18_87_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_18_87_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_18_87_Closed_Text.style.display='none'; Codehighlighter1_18_87_Open_Image.style.display='inline'; Codehighlighter1_18_87_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span style="COLOR: #0000ff">struct</span> <span style="COLOR: #000000"> AFX_MSGMAP </span> <span id="Codehighlighter1_18_87_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> </font> <span id="Codehighlighter1_18_87_Open_Text"> <font size="2"> <span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> AFX_MSGMAP</span> <span style="COLOR: #000000">*</span> </font> <font size="2"> <span style="COLOR: #000000"> pBaseMap;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> AFX_MSGMAP_ENTRY</span> <span style="COLOR: #000000">*</span> </font> <span style="COLOR: #000000"> <font size="2"> lpEntries;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</font> </span> </span> <span style="COLOR: #000000"> <font size="2">;</font> </span> </div> <p> <font size="2">q样一个AFX_MSGMAP对象成了构建消息映表的关键h物,它一只手拉着基类的AFX_MSGMAP对象Q另一只手拉着cLw的消息映射表,q样只要正确地在每一个类中都安插一个AFX_MSGMAP对象Q那么整个消息映表徏立v来了。那么,何ؓ正确呢?含义?Q一是正的讄pBaseMapQo它指向基c,二是正确的徏立类自n的消息映表。这两个工作是由4个宏完成的,<br /><br />它们是:DECLARE_MEMSSAGE_MAP() / BEGIN_MESSAGE_MAP() / ON_COMMAND()Q注QON_COMMAND宏只是ؓ了处理命令消息,对于其它的消息还有对应的宏,但是原理是相同的Q?/ END_MESSAGE_MAP()?br />让我们一个个的看看:</font> </p> <p> <font size="2"> </font> </p> <p> <font size="2"> </font> </p> <p> <font size="2"> </font> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">#define</span> <span style="COLOR: #000000"> DECLARE_MESSAGE_MAP() \</span> </font> <span style="COLOR: #000000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> </font> </span> <font size="2"> <span style="COLOR: #0000ff">private</span> </font> <font size="2"> <span style="COLOR: #000000">: \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />  </span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">const</span> </font> <font size="2"> <span style="COLOR: #000000"> AFX_MSGMAP_ENTRY _messageEntries[]; \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #0000ff">protected</span> </font> <font size="2"> <span style="COLOR: #000000">: \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />  </span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">const</span> </font> <font size="2"> <span style="COLOR: #000000"> AFX_MSGMAP messageMap; \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />  </span> <span style="COLOR: #0000ff">virtual</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> AFX_MSGMAP</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000"> GetMessageMap() </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000">; \</span> </font> </div> <p> <font size="2">q个宏的作用?Q?br /> 1. 在类中插入一个静态成员_messageEntriesQ这是用来存攄要处理的消息的数l(即类本n的消息映表Q?br /> 2.  另一个静态成员massageMap用来指向基类的消息映表<br /> 3. 安插一个虚函数Q其内容有待实现</font> </p> <p> <font size="2">接下来,_messageEntries的初始化QmessageMap的正指向,GetMessageMap函数的实现这些工作还都没做,那正是后三个宏的责QQ它们要序使用Q方能工作正常?</font> </p> <p> <font size="2"> </font> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">#define</span> <span style="COLOR: #000000"> BEGIN_MESSAGE_MAP(theClass, baseClass) \</span> </font> <span style="COLOR: #000000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />  </font> </span> <font size="2"> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> AFX_MSGMAP</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000"> theClass::GetMessageMap() </span> <span style="COLOR: #0000ff">const</span> </font> <font size="2"> <span style="COLOR: #000000"> \<br /><img id="Codehighlighter1_107_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_107_139_Open_Text.style.display='none'; Codehighlighter1_107_139_Closed_Image.style.display='inline'; Codehighlighter1_107_139_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_107_139_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_107_139_Closed_Text.style.display='none'; Codehighlighter1_107_139_Open_Image.style.display='inline'; Codehighlighter1_107_139_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span> <span id="Codehighlighter1_107_139_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_107_139_Open_Text"> <span style="COLOR: #000000">{ </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">&</span> <span style="COLOR: #000000">theClass::messageMap; }</span> </span> </font> <font size="2"> <span style="COLOR: #000000"> \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />  AFX_COMDAT </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> AFX_MSGMAP theClass::messageMap </span> <span style="COLOR: #000000">=</span> </font> <font size="2"> <span style="COLOR: #000000"> \<br /><img id="Codehighlighter1_202_258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_202_258_Open_Text.style.display='none'; Codehighlighter1_202_258_Closed_Image.style.display='inline'; Codehighlighter1_202_258_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_202_258_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_202_258_Closed_Text.style.display='none'; Codehighlighter1_202_258_Open_Image.style.display='inline'; Codehighlighter1_202_258_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span> <span id="Codehighlighter1_202_258_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_202_258_Open_Text"> <span style="COLOR: #000000">{ </span> <span style="COLOR: #000000">&</span> <span style="COLOR: #000000">baseClass::messageMap, </span> <span style="COLOR: #000000">&</span> <span style="COLOR: #000000">theClass::_messageEntries[</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">] }</span> </span> </font> <font size="2"> <span style="COLOR: #000000">; \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />  AFX_COMDAT </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> AFX_MSGMAP_ENTRY theClass::_messageEntries[] </span> <span style="COLOR: #000000">=</span> </font> <font size="2"> <span style="COLOR: #000000"> \<br /><img id="Codehighlighter1_334_338_Open_Image" onclick="this.style.display='none'; Codehighlighter1_334_338_Open_Text.style.display='none'; Codehighlighter1_334_338_Closed_Image.style.display='inline'; Codehighlighter1_334_338_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_334_338_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_334_338_Closed_Text.style.display='none'; Codehighlighter1_334_338_Open_Image.style.display='inline'; Codehighlighter1_334_338_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span> <span id="Codehighlighter1_334_338_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_334_338_Open_Text"> <span style="COLOR: #000000">{ \</span> </span> </font> </div> <p> <font size="2">q个宏的作用?Q?br />1. 定义了安插在cM的虚函数GetMessageMap()Q只是简单的q回messageMap对象的地址<br />2. 初始化messageMapQ把zcd基类联系h构成一个大的消息映表<br />3. 为类本n的消息映表的初始化做语法准?/font> </p> <p> <font size="2">ON_COMMANDq个宏的作用是向_messageEntries数组中添加类本n要处理的命o消息Q其实在MFC中还有很多更方便的宏可以向类中添加消息,例如OM_WM_PAINT{,q里Q我们主要讨论ON_COMMANDQ毕竟原理都是相同的?br /></font> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">#define</span> <span style="COLOR: #000000"> ON_COMMAND(id, memberFxn) \</span> </font> <span style="COLOR: #000000"> <br /> <font size="2"> <img id="Codehighlighter1_37_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_135_Open_Text.style.display='none'; Codehighlighter1_37_135_Closed_Image.style.display='inline'; Codehighlighter1_37_135_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_37_135_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_135_Closed_Text.style.display='none'; Codehighlighter1_37_135_Open_Image.style.display='inline'; Codehighlighter1_37_135_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </font> </span> <span id="Codehighlighter1_37_135_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <font size="2"> <img src="http://www.shnenglu.com/images/dot.gif" /> </font> </span> <font size="2"> <span id="Codehighlighter1_37_135_Open_Text"> <span style="COLOR: #000000">{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSigCmd_v, \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  static_cast</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">AFX_PMSG</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> (memberFxn) }</span> </span> <span style="COLOR: #000000">,</span> </font> </div> <p> <font size="2">无非是对AFX_MSG_ENTRYl构的初始化Q这样在cM为每一个想要处理的消息都是用一个ON_COMMAND宏,p动的初始化了cLw的消息映射表?/font> </p> <p> <font size="2">最后,当全部的信息d完毕后,使用END_MESSAGE_MAP()宏通知MFC一个类消息映射表结束了?br /></font> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">#define</span> <span style="COLOR: #000000"> END_MESSAGE_MAP() \</span> </font> <span style="COLOR: #000000"> <br /> <font size="2"> <img id="Codehighlighter1_31_68_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_68_Open_Text.style.display='none'; Codehighlighter1_31_68_Closed_Image.style.display='inline'; Codehighlighter1_31_68_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_31_68_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_68_Closed_Text.style.display='none'; Codehighlighter1_31_68_Open_Image.style.display='inline'; Codehighlighter1_31_68_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />  </font> </span> <font size="2"> <span id="Codehighlighter1_31_68_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_31_68_Open_Text"> <span style="COLOR: #000000">{</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">, </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">, </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">, </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">, AfxSig_end, (AFX_PMSG)</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000"> }</span> </span> </font> <font size="2"> <span style="COLOR: #000000"> \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> }; \</span> </font> </div> <p> <font size="2">实现手法单纯得很Q无非是一个全0的AFX_MESSAGE_MAP对象?br /><br /></font> <font size="2"> <strong> <font size="3">l论<br /></font> </strong>惌让你的类处理某个消息Q用下面的l合Q?/font> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">BEGIN_MESSAGE_MAP(theClass, the </span> <span style="COLOR: #0000ff">base</span> </font> <font size="2"> <span style="COLOR: #000000"> Class)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">消息处理?/span> </font> <span style="COLOR: #008000"> <br /> <font size="2"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> </font> </span> <font size="2"> <span style="COLOR: #000000">END_MESSAGE_MAP()</span> </font> </div> <br /> <font size="2">Q待l……)</font> <img src ="http://www.shnenglu.com/nacci/aggbug/7363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/nacci/" target="_blank">nacci</a> 2006-05-18 16:31 <a href="http://www.shnenglu.com/nacci/archive/2006/05/18/7363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC漫谈Q二Q——对象的动态创?/title><link>http://www.shnenglu.com/nacci/archive/2006/05/18/7355.html</link><dc:creator>nacci</dc:creator><author>nacci</author><pubDate>Thu, 18 May 2006 08:07:00 GMT</pubDate><guid>http://www.shnenglu.com/nacci/archive/2006/05/18/7355.html</guid><wfw:comment>http://www.shnenglu.com/nacci/comments/7355.html</wfw:comment><comments>http://www.shnenglu.com/nacci/archive/2006/05/18/7355.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/nacci/comments/commentRss/7355.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/nacci/services/trackbacks/7355.html</trackback:ping><description><![CDATA[ <p> <font size="2">接上ơRTTI的话题?br /><hr /><br />能够在运行时发现一个对象的cdQ就可以在运行时动态的创徏一个对象。在一个类库中Q拥有统一的对象创建方式是非常重要的?br /><p></p><p>在MFC中,对象的动态创依赖于RTTI所建立h的类别型录,和动态创建有关的CRuntimeClass成员有两个:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">CObject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> (PASCAL</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> m_pfnCreateObject)(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 指向用于创徏对象的函?/span><span style="COLOR: #008000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">CObject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> CreateObject(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 利用m_pfnCreateObject创徏对象</span></div><p>利用RTTI建立的类别型录,DECLARE_DYNCREATE / IMPLEMENT_DYNCREATEl箋为类d了动态创建的功能?/p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> DECLARE_DYNCREATE (class_name) \</span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    DECLARE_DYNAMIC (class_name) \ <br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> CObject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> PASCAL CreateObject();</span></div><p>q个宏同L在类声明中,它不但ؓcL加了class##class_name对象和GetRuntimeClass()Q还为类加入了一个静态函数CreateObject,用来q行对象的动态创建。同样IMPLEMENT_DYNCREATE用来对上面添加的内容作定义和初始化工作?/p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> IMPLEMENT_DYNCREATE (class_name, base_class_name) \</span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    CObject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> PASCAL class_name::CreateObject() \<br /><img id="Codehighlighter1_115_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_115_140_Open_Text.style.display='none'; Codehighlighter1_115_140_Closed_Image.style.display='inline'; Codehighlighter1_115_140_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_115_140_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_115_140_Closed_Text.style.display='none'; Codehighlighter1_115_140_Open_Image.style.display='inline'; Codehighlighter1_115_140_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_115_140_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_115_140_Open_Text"><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> class_name; }</span></span><span style="COLOR: #000000"> \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    IMPLEMENT_RUNTIMECLASS (class_name, base_class_name, </span><span style="COLOR: #000000">0xFFFF</span><span style="COLOR: #000000">, \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    class_name::CreateObject, NULL)</span></div><p>和IMPLEMENT_DYNAMIC不同的是Q这里的IMPLEMENT_RUNTIMECLASS中的W?个参数ƈ不ؓNULLQ而是class_name::CreateObjectQ这样就指定了用于创建对象的函数Q至于其它的内容Q与RTTI没有什么不同?br /><br />于是Q整个对象的动态创E就变得非常单了Q只要我们找到某个特定类的CRuntimeClass对象Q利用class##class_name.CreateObject()可以了?/p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">CObject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> CRuntimeClass::CreateObject()<br /><img id="Codehighlighter1_39_122_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_122_Open_Text.style.display='none'; Codehighlighter1_39_122_Closed_Image.style.display='inline'; Codehighlighter1_39_122_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_39_122_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_122_Closed_Text.style.display='none'; Codehighlighter1_39_122_Open_Image.style.display='inline'; Codehighlighter1_39_122_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_39_122_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_39_122_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />  CObject</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pObject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />  pObject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">m_pfnCreateObject)();<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> pObject;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p><font size="3"><strong>l论<br /></strong></font>惌你的cdMFC中支持动态创建,<br />1. 在类声明中用DECLARE_DYNAMIC<br />2. 在类定义文g中用IMPLEMENT_DYNAMICQ此?br />    class##class_name.m_pfnCreateObject = class_name::CreateObject; <br />    CRuntimeClass::CreateObject利用m_pfnCreateObject可以进行对象的动态创Z<br />                                                                                                                                                Q待l……)<br /></p></font> </p> <p> </p> <img src ="http://www.shnenglu.com/nacci/aggbug/7355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/nacci/" target="_blank">nacci</a> 2006-05-18 16:07 <a href="http://www.shnenglu.com/nacci/archive/2006/05/18/7355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC漫谈Q一Q——RTTIhttp://www.shnenglu.com/nacci/archive/2006/05/18/7350.htmlnaccinacciThu, 18 May 2006 06:53:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/18/7350.htmlhttp://www.shnenglu.com/nacci/comments/7350.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/18/7350.html#Feedback1http://www.shnenglu.com/nacci/comments/commentRss/7350.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7350.html所有的q一pd的东襉K来源于前天晚上的一个电(sh)话,内容大概是说Q?/span> ?/span> 你能教会我一个让我对 MFC 有点感觉?/span> Hello World 吗?我望一个像?/span> C 写的 Win32 Hello World 一L观的例子?/span> ?/span> xq曾l是我学?/span> MFC 的时候也惛_q的问题。我是一个喜Ƣ刨栚w底的人,喜欢把事情搞明白Q于是曾l很长的一D|间里Q我都困惑在UL杂ؕ的代码里。现在回惌v来,侯捷老师的?/span> Dessecting MFC 》和 Jeff Prosise 的?/span> Programming MFC 》一赯来,估计能达到解惑的目的。当Ӟ需要的是一点点耐心和对 Win32 E序的一Ҏ(gu)基本的了解(貌似废话。。。)。于是那天晚上, QQ 上和那个朋友聊了挺长一D|_腾了一?/span> MFC 的源代码Q就有了q一pd的东西,全当是故地重怺一番。言归正传吧。文章中所有的代码都提取自MFC 7.0


在MFC中,RTTI是依靠ؓ彼此有承关pȝcd立一个记录其cd的链表来实现的,和RTTI有关的CRuntimeClass成员?个:
LPCSTR m_lpszClassName;    // 用于记录cd
// 用于指向基类的CRuntimeClassl构
CRuntimeClass* m_pBaseClass;  
// 用于指向链表中前一个类的CRuntimeClassl构
CRuntimeClass* m_pNextClass;
// 用于建立cd型录
const AFX_CLASSINIT* m_pClassInit; 

q样在这个类别型录中有了许多条路径Q每一条都是沿着m_pBaseClass一直可以找到某个类的最l基cR要把一个类加入到这个类别型录中要用C个宏Q?br />DECLARE_DYNAMIC / IMPLEMENT_DYNAMIC
其中Q?br />
#define DECLARE_DYNAMIC (class_name) \
public: \
    
static const CRuntimeClass class##class_name; \
    
virtual CRuntimeClass* GetRuntimeClass() const; \

q个宏是用在cd明中的,其作用就是根据类的名字ؓ该类d两个public的成员,分别用于记录cȝ型别和获得对象class##class_name的地址Q注意这里的class##class_name是个静态成员,q就为后面我们做cd的比较奠定了基础Q承于同一个基cȝzcd象包含共同的静态类成员Q。在cM使用了DECLARE_DYNAMIC后,q要?cpp的文件中使用IMPLEMENT_DYNAMIC宏,该宏的作用就是初始化class##class_name对象和定义GetRuntimeClass函数?br />
#define IMPLEMENT_DYNAMIC (class_name, base_class_name) \
    IMPLEMENT_RUNTIMECLASS (class_name, base_class_name, 
0xFFFF, NULL, NULL)

IMPLEMENT_DYNAMIC在用的时候,要指定类和其基类的名字,之后利用IMPLEMENT_RUNTIMECLASSq行实质性的初始化活动?br />
#define IMPLEMENT_RUNTIMECLASS (class_name, base_class_name, wSchema, pfnNew, class_init) \
    AFX_COMDAT 
const CRuntimeClass class_name::class##class_name = { \
          #class_name, 
sizeof(class class_name), wSchema, pfnNew, \
          RUNTIME_CLASS(base_class_name), NULL, class_init }
; \

    CRuntimeClass
* class_name::GetRuntimeClass() const \
    
return RUNTIME_CLASS (class_name); } \

其中Q在class#class_name的初始化中和RTTI相关的只有:
&name_class用来初始化m_lpszClassName
RUNTIME_CLASS(base_class_name)用来初始化CRuntimeClass* m_pBaseClass
NULL用来初始化CRuntimeClass* m_pNextClassQ此时类别型录还没有建立hQ?

另外QRUNTIME_CLASS是用来获得class##class_name对象地址的宏Q?br />

#define RUNTIME_CLASS (class_name) _RUNTIME_CLASS (class_name)
#define _RUNTIME_CLASS (class_name) \
    ((CRuntimeClass
*) (&class_name::class##class_name))

q样Q当对程序中的每一个类都用了DECLARE_DYNAMIC / IMPLEMENT_DYNAMIC宏之后,׃ؓ该类在类别型录中q行了登记工作。当ӞMFC中所有的c都z于CObjectQ所以所有的路线最l都要在CObject处会合,׃CObject没有基类Q所以它的CRuntimeClass对象q不能用上面的两个宏来实玎ͼ在objcore.cpp中,为CObject的classCObject对象单独作了初始化的工作Q?/p>

const struct CRuntimeClass CObject::classCObject =
 
"CObject"sizeof(CObject), 0xffff, NULL, NULL, NULL };

我们可以看到m_pBaseClass被初始化为NULL。另外,也单独实CGetRuntimeClass():

CRuntimeClass* CObject::GetRuntimeClass() const {
    
return _RUNTIME_CLASS (CObject);
}

至于_RUNTIME_CLASSQ前面已l说q了。这P如果惌把自qcMl给MFCQ只要在cd明中使用DECLARE_DYNAMICQ在cȝ实现中加入IMPLEMENT_DYNAMIC
Q就可以把自己注册到cd型录中了。至此,Z实现cd象的RTTIQ我们已l做好了所有的准备工作Q下面就来看一下它的实玎ͼ它主要是靠CObject中的IsKindOf函数完成的?/p>

BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
{
   
// Zz,略去了不相关的代?/span>
   CRuntimeClass* pClassThis = GetRuntimeClass();
   
return pClassThis->IsDerivedFrom(pClass);
}

q里Q由于GetRuntimeClass是虚函数Q所以pClassThis会指向调用IsKindOf函数的类对象的class##class_nameQ之后利用指向该对象的指针调用IsDerivedFromQ?/p>

BOOL CRuntimeClass::IsDerivedFrom(const CRuntimeClass* pBaseClass) const {
    
//Zz,略去了不相关的代?/span>
    if (pBaseClass == NULL)
        
return FALSE;

    
// simple SI case
    const CRuntimeClass* pClassThis = this;
    
while (pClassThis != NULL) {
        
if (pClassThis == pBaseClass)
         
return TRUE;
        pClassThis 
= pClassThis->m_pBaseClass;
    }
    
    
return FALSE;       // walked to the top, no match
}

我们知道Q派生类和基cd享基cȝstatic对象Q所以在q里Q派生类和基cM定共享相同的class##class_name对象Q这׃ؓ我们判定两个cL否有l承关系提供了理论基Q同P在IsDerivedFrom中,while循环中的if也的是q样做的Q它沿着该类的同宗\U上行,只要不到共同的祖先CObjectQ就决不|休。 

l论
如果惌把自qcMl给MFCQ只要在cd明中使用DECLARE_DYNAMICQ在cȝ实现中加入IMPLEMENT_DYNAMIC
Q就可以把自己注册到cd型录中了。  Q待l……)


nacci 2006-05-18 14:53 发表评论
]]>
回家http://www.shnenglu.com/nacci/archive/2006/05/16/7246.htmlnaccinacciTue, 16 May 2006 05:02:00 GMThttp://www.shnenglu.com/nacci/archive/2006/05/16/7246.htmlhttp://www.shnenglu.com/nacci/comments/7246.htmlhttp://www.shnenglu.com/nacci/archive/2006/05/16/7246.html#Feedback4http://www.shnenglu.com/nacci/comments/commentRss/7246.htmlhttp://www.shnenglu.com/nacci/services/trackbacks/7246.html         一ơ工会经历的坎坷惛_的?br />


        dQ是一个过E;回家Q是一个过E。开门、关门,q些属于生命里的情节。每日每月每q都有h生的舞台上演出,直到生命的舞台拉下大q?br />
  初离家时的那U感觉让人刻苦铭心。不要说d的理由,为逃避q还是ؓ谋生。我d了,背v行囊Q在心中暗暗发一回誓Q然后头也不回地走在不知廷C方的路。尽知道有x的眼睛牵着q去的n影,可还是走下去。走得远?走得累了Q才知道家是圆心Q而我们无论到何时都是圆上的一个点Q我们离家越q,家对我们的离心率p大。我们在茫茫人v中沉、挣扎,如一只在茫茫风雨中寻觅谷_的鸟Q深感自q渺小Q这时才感到家的温暖与安全。我们在d的时候义无反,可是d后,我们又如相思的(zhn)者在心中看着Ӟ才知道家是我们一生的渴望?br />
  回家是一U求的心情Q那U心情,是离家的延箋。被风雨z礼后的船刻满大L刀痕,帆破了。船漏了Q水手也乏了。只有此时我们才能体会出归心似箭q个词的份量。就如飞倦的鸟儿惌扑ֈ自己的l(f)Q折了翅膀在风雨中痛苦地搏d觅,惌紧张的神l放个假Q让疲惫的精歇一歇。推门的一刚wQ貌的洒脱,骨子里却有与生俱来的软弱与疲乏。本惛_家诉说遭受的创伤和委屈,却满脸写着春风得意的笑容与成功的自豪。你t掉鞋子光着脚在地板上走来走去,你看Cd时点着的蜡烛还在燃烧,你离家时打开的那本书q放在桌上。你一会儿看看书,一会儿喝几口茶或工炚w食吃Q你在温暖中睡一个温馨的觉,攒到_的力量?br />
留下
希望w边的每个h留下
每个人的内心都有脆弱的角?br />现在Q请听我?br />因ؓ我已l成Z伤害你心늚?br />注定要承受心灵孤单的这D|?br />感谢大家q去做过的一?br />那些丽已经永存于心
在我的记忆里Q强烈望和d说再?br />心里攑֣痛哭
因ؓ真的很难说再?br />看着你们伸出双手
我相信你们能明白我的心情
Z自己的心情,扑ֈ自己的目?br />不经意掉落的泪水
z溢的爱的光?br />因ؓq里承蝲着我们现实的梦?br />在那些最亲爱的记忆里
有我们一起创造的奇迹
感受C心灵的呼?br />从远方传来的声音Q声Cl?br />那是生命的旋?br />曄的声音今天成了美妙的旋律
盘桓在心_久到我们失去记忆
即便是那?
我相信,我依旧可以喊?恋爱之家+q个名字Q?/font>
 



nacci 2006-05-16 13:02 发表评论
]]>
在编译时军_cd的可l承?/title><link>http://www.shnenglu.com/nacci/archive/2006/05/15/7200.html</link><dc:creator>nacci</dc:creator><author>nacci</author><pubDate>Mon, 15 May 2006 09:20:00 GMT</pubDate><guid>http://www.shnenglu.com/nacci/archive/2006/05/15/7200.html</guid><wfw:comment>http://www.shnenglu.com/nacci/comments/7200.html</wfw:comment><comments>http://www.shnenglu.com/nacci/archive/2006/05/15/7200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/nacci/comments/commentRss/7200.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/nacci/services/trackbacks/7200.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋?>一DC++的读书笔?br /><br /><em>l定L<span lang="EN-US">2</span>个类?span lang="EN-US">U</span>?span lang="EN-US">T</span>Q你如何来确?span lang="EN-US">U</span>是否l承?span lang="EN-US">T</span>呢?在编译时发现两个cd的这U关pd于泛型库的优化是极ؓ重要的。在泛型函数中,如果某个cdC特定的接口,你可以根据这U关pMؓ其利用特定的优化法。另外,如果我们可以在编译期军_<span lang="EN-US">2</span>个类的关p,我们也可以远?span lang="EN-US">dynamic_cast</span>Q从而避免运行时的效率开销?br /><span lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></em></span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋?> <hr /> <br />在着手解册个问题之前,我们先来考虑一个更Z般的问题。假设我们有<span lang="EN-US">2</span>个Q意类?span lang="EN-US">U</span>?span lang="EN-US">T</span>Q如何确?span lang="EN-US">T</span>能否自动转换?span lang="EN-US">U</span>呢?<span lang="EN-US"><o:p></o:p></span></span> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋?>{案也许让你有些惊讶Q我们可以利用sizeof来帮忙。你可以?span lang="EN-US">sizeof</span>用在M复杂的表辑ּ上,<span lang="EN-US"> sizeof</span>可以q回q个表达式值的大小Q而不会在q行时评估表辑ּ的倹{这也就意味着Q你可以把函数重载、模版实例化、{换规则等{所有你可以?span lang="EN-US">C++</span>表达式中使用的设施统l塞?span lang="EN-US">sizeof</span>中来。实际上Q?span lang="EN-US">sizeof</span>隐藏了一个可以演l表辑ּcd的设施,最l,<span lang="EN-US">sizeof</span>会返回表辑ּl果的类型?span lang="EN-US"><o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋?>q样我们可以通过<span lang="EN-US">sizeof</span>和重载函数来解决判断cd之间的可转换性的问题。思\很简单:我们提供<span lang="EN-US">2</span>个重载函敎ͼ一个函数的参数是我们要转换成的cdQ我们用<span lang="EN-US">U</span>表示Q,而另一个则用来接收其他所有类型的参数。然后我们把要检的cdQ用<span lang="EN-US">T</span>表示Q传递给重蝲函数。如果接受类?span lang="EN-US">U</span>为参数的函数被调用了Q我们就认ؓ<span lang="EN-US">T</span>可以转换?span lang="EN-US">U</span>Q反之则不可以。如何确定哪个函数被调用了呢Q我们利?span lang="EN-US">sizeof</span>出马Q我们只要让重蝲函数q回不同的类型,然后查一下返回值就可以了?span lang="EN-US"><o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋?>实践一下:<span lang="EN-US"><o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋?>首先Q定?span lang="EN-US">2</span>个不同的cdQ?span lang="EN-US"><o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">typedef </span> <span style="COLOR: #0000ff">char</span> <span style="COLOR: #000000"> Small;<br /><img id="Codehighlighter1_30_47_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_47_Open_Text.style.display='none'; Codehighlighter1_30_47_Closed_Image.style.display='inline'; Codehighlighter1_30_47_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_30_47_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_47_Closed_Text.style.display='none'; Codehighlighter1_30_47_Open_Image.style.display='inline'; Codehighlighter1_30_47_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> Big </span> <span id="Codehighlighter1_30_47_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_30_47_Open_Text"> <span style="COLOR: #000000">{ </span> <span style="COLOR: #0000ff">char</span> <span style="COLOR: #000000"> dummy[</span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">]; }</span> </span> <span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">默认情况下,</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">sizeof(Small)</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">1</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Q?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Big</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">的大则无关紧要Q我们只要知道肯定不?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">1</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">好了?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">其次Q定?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">2</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">个重载函敎ͼ一个接收要转换成的cdQ?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Small Test(U);<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">另一个用来接收“其他的所有类型”,我们要保证在排除所有的转换之后才调用这个函敎ͼ</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">OK,</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">用省略号表示的参数列表真好满需?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Big Test(...);<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <i style="mso-bidi-font-style: normal"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">管把一?/span> </i> <i style="mso-bidi-font-style: normal"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">C++</span> </i> <i style="mso-bidi-font-style: normal"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">对象传递给</span> </i> <i style="mso-bidi-font-style: normal"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">...</span> </i> <i style="mso-bidi-font-style: normal"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">参数cd的函敎ͼ其结果未定义Q但是实际上我们q没有调用这个函数。我们甚臛_以不用实现它?/span> </i> <i style="mso-bidi-font-style: normal"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </i> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes">最后,我们?/span> <span lang="EN-US" style="mso-font-kerning: 0pt; mso-no-proof: yes">sizeof</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes">判断一下就完成d了:</span> <span lang="EN-US" style="mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">bool</span> <span style="COLOR: #000000"> convExist </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">sizeof</span> <span style="COLOR: #000000">(Test(T())) </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">sizeof</span> <span style="COLOR: #000000">(Small);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> </div> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">你也怼_是它了Q?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Test</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">的调用会创徏一个时对?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Q之后可能的l果只能?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">sizeof(Small)</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">sizeof(Big)</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">。兴奋之余,我们q要看到一个问题。如?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">的构造函数被设计?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">private</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Q我们就前功弃了。当然解决的Ҏ(gu)也很单,定义一个函敎ͼ让他q回cd?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">的对象?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">T MakeT();<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">bool</span> <span style="COLOR: #000000"> convExist </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">sizeof</span> <span style="COLOR: #000000">(Test(MakeT())) </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">sizeof</span> <span style="COLOR: #000000">(Small);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">最后,把刚才的东西装C个类里:</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">template </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> T, </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> U</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> <br /> <img id="Codehighlighter1_45_250_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_250_Open_Text.style.display='none'; Codehighlighter1_45_250_Closed_Image.style.display='inline'; Codehighlighter1_45_250_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_45_250_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_45_250_Closed_Text.style.display='none'; Codehighlighter1_45_250_Open_Image.style.display='inline'; Codehighlighter1_45_250_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> Conversion </span> <span id="Codehighlighter1_45_250_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_45_250_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    typedef </span> <span style="COLOR: #0000ff">char</span> <span style="COLOR: #000000"> Small;<br /><img id="Codehighlighter1_85_102_Open_Image" onclick="this.style.display='none'; Codehighlighter1_85_102_Open_Text.style.display='none'; Codehighlighter1_85_102_Closed_Image.style.display='inline'; Codehighlighter1_85_102_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_85_102_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_102_Closed_Text.style.display='none'; Codehighlighter1_85_102_Open_Image.style.display='inline'; Codehighlighter1_85_102_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> Big </span> <span id="Codehighlighter1_85_102_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_85_102_Open_Text"> <span style="COLOR: #000000">{ </span> <span style="COLOR: #0000ff">char</span> <span style="COLOR: #000000"> dummy[</span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">]; }</span> </span> <span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> Small Test(U);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> Big Test(<img src="http://www.shnenglu.com/images/dot.gif" />);<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> T MakeT();<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">:<br /><img id="Codehighlighter1_198_247_Open_Image" onclick="this.style.display='none'; Codehighlighter1_198_247_Open_Text.style.display='none'; Codehighlighter1_198_247_Closed_Image.style.display='inline'; Codehighlighter1_198_247_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_198_247_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_198_247_Closed_Text.style.display='none'; Codehighlighter1_198_247_Open_Image.style.display='inline'; Codehighlighter1_198_247_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">enum</span> <span style="COLOR: #000000"> </span> <span id="Codehighlighter1_198_247_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_198_247_Open_Text"> <span style="COLOR: #000000">{ exist </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">sizeof</span> <span style="COLOR: #000000">(Test(MakeT())) </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">sizeof</span> <span style="COLOR: #000000">(Small) }</span> </span> <span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">另外Q我们还可以讄另外一个常?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Conversion::SameType</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Q如?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">U</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">表示同一个类型,那么q回</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">true</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Q?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">template </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> T, </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> U</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> <br /> <img id="Codehighlighter1_45_94_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_94_Open_Text.style.display='none'; Codehighlighter1_45_94_Closed_Image.style.display='inline'; Codehighlighter1_45_94_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_45_94_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_45_94_Closed_Text.style.display='none'; Codehighlighter1_45_94_Open_Image.style.display='inline'; Codehighlighter1_45_94_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> Conversion </span> <span id="Codehighlighter1_45_94_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_45_94_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />    .. </span> <span style="COLOR: #0000ff">as</span> <span style="COLOR: #000000"> above..<br /><img id="Codehighlighter1_74_92_Open_Image" onclick="this.style.display='none'; Codehighlighter1_74_92_Open_Text.style.display='none'; Codehighlighter1_74_92_Closed_Image.style.display='inline'; Codehighlighter1_74_92_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_74_92_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_92_Closed_Text.style.display='none'; Codehighlighter1_74_92_Open_Image.style.display='inline'; Codehighlighter1_74_92_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">enum</span> <span style="COLOR: #000000"> </span> <span id="Codehighlighter1_74_92_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_74_92_Open_Text"> <span style="COLOR: #000000">{ sameType </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">false</span> <span style="COLOR: #000000">}</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">之后为同一个类型设计一个偏特化版本Q?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="FR" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-ansi-language: FR; mso-no-proof: yes"> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">template </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> T</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> <br /> <img id="Codehighlighter1_42_83_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_83_Open_Text.style.display='none'; Codehighlighter1_42_83_Closed_Image.style.display='inline'; Codehighlighter1_42_83_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_42_83_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_83_Closed_Text.style.display='none'; Codehighlighter1_42_83_Open_Image.style.display='inline'; Codehighlighter1_42_83_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> Conversion</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">T, T</span> <span style="COLOR: #000000">></span> <span style="COLOR: #000000"> </span> <span id="Codehighlighter1_42_83_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_42_83_Open_Text"> <span style="COLOR: #000000">{<br /><img id="Codehighlighter1_53_80_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_80_Open_Text.style.display='none'; Codehighlighter1_53_80_Closed_Image.style.display='inline'; Codehighlighter1_53_80_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_53_80_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_80_Closed_Text.style.display='none'; Codehighlighter1_53_80_Open_Image.style.display='inline'; Codehighlighter1_53_80_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">enum</span> <span style="COLOR: #000000"> </span> <span id="Codehighlighter1_53_80_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.shnenglu.com/images/dot.gif" /> </span> <span id="Codehighlighter1_53_80_Open_Text"> <span style="COLOR: #000000">{ exists </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">, sameType </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000"> }</span> </span> <span style="COLOR: #000000">;<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000">;<br /></span> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">最后,回到我们的主题,通过</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Conversion</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">的帮助,我们可以来决定两个类型的l承性了?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 66px; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">#define</span> <span style="COLOR: #000000"> SUPERSUBCLASS(T, U) \</span> <span style="COLOR: #000000"> <br /> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    (Conversion</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> U</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">, </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> T</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">)::exists </span> <span style="COLOR: #000000">&&</span> <span style="COLOR: #000000"> \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #000000">!</span> <span style="COLOR: #000000">Conversion</span> <span style="COLOR: #000000"><</span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> T</span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000">, </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000">*></span> <span style="COLOR: #000000">::sameType)</span> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">U</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">l承?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">或?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">U</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">是同一个类型的时候,</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">SUPERSUBCLASS</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">q回</span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">true</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">。ȝ一下,只有下面q?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">3</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">U情?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">const U*</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">可以隐式转换?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">const T*</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">Q?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-fareast-font-family: 'Lucida Console'; mso-no-proof: yes"> <span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">      </span></span> </span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">U</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">是同一个类?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-fareast-font-family: 'Lucida Console'; mso-no-proof: yes"> <span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">      </span></span> </span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">U</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">的Q意一个基c?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-bidi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-fareast-font-family: 'Lucida Console'; mso-no-proof: yes"> <span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">      </span></span> </span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">T</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">void<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 7.8pt 0cm; mso-para-margin-top: .5gd; mso-para-margin-right: 0cm; mso-para-margin-bottom: .5gd; mso-para-margin-left: 0cm"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">我们通过W?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">2</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Lucida Console'; mso-hansi-font-family: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes">个测试屏蔽了最后一U情形。当Ӟ如果你认为同一U类型也不算是承关pȝ话,可以q一步严格其条gQ?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-font-kerning: 0pt; mso-no-proof: yes"> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #0000ff">#define</span> <span style="COLOR: #000000"> SUPERSUBCLASS_STRICT(T, U) \</span> <span style="COLOR: #000000"> <br /> <img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    (SUPERSUBCLASS(T, U) </span> <span style="COLOR: #000000">&&</span> <span style="COLOR: #000000"> \<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />    </span> <span style="COLOR: #000000">!</span> <span style="COLOR: #000000">Conversion(</span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> T, </span> <span style="COLOR: #0000ff">const</span> <span style="COLOR: #000000"> U)::sameType)</span> </div> <img src ="http://www.shnenglu.com/nacci/aggbug/7200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/nacci/" target="_blank">nacci</a> 2006-05-15 17:20 <a href="http://www.shnenglu.com/nacci/archive/2006/05/15/7200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.mutian100.cn" target="_blank">ŷ츾XXXXԾþþ</a>| <a href="http://www.ffsqblcj.cn" target="_blank">ҹþþþüŮӰԺ</a>| <a href="http://www.ganzhoupei.cn" target="_blank">þҹӰԺѹۿ</a>| <a href="http://www.bbs0310.cn" target="_blank">2019þþø456</a>| <a href="http://www.9kgat.cn" target="_blank">þþþ99ƷƬëƬ</a>| <a href="http://www.999966.com.cn" target="_blank">þù׾Ʒǿ</a>| <a href="http://www.hotdee.com.cn" target="_blank">þùŷպƷ </a>| <a href="http://www.xbfid.cn" target="_blank">þþŮһ</a>| <a href="http://www.9kgat.cn" target="_blank">þҹƵ</a>| <a href="http://www.dxcheck.cn" target="_blank">¾þƵ</a>| <a href="http://www.cycn168.cn" target="_blank">þˬˬƬav鷳 </a>| <a href="http://www.ed34.cn" target="_blank">Ʒһþ㽶߿ۿ </a>| <a href="http://www.ahzyjlr.cn" target="_blank">þþWWWѾƷ</a>| <a href="http://www.qdjzx.cn" target="_blank">þAAAAƬһ</a>| <a href="http://www.fzdhqp.cn" target="_blank">þ޵Ӱ</a>| <a href="http://www.6654sf.cn" target="_blank">ŷ޹Ʒþø</a>| <a href="http://www.schzjy.cn" target="_blank">þҹƵ</a>| <a href="http://www.createclouds.cn" target="_blank">Ļþ</a>| <a href="http://www.apcu.cn" target="_blank">þþƷAV</a>| <a href="http://www.bb657.cn" target="_blank">Ʒþù鶹99վ</a>| <a href="http://www.68zyw.cn" target="_blank">˺ݺۺϾþ88</a>| <a href="http://www.hkgsjt.cn" target="_blank">þþþӰԺС</a>| <a href="http://www.love5000.cn" target="_blank">ĻhdþþƷ </a>| <a href="http://www.fuzd88.cn" target="_blank">þһձɫۺϾþ</a>| <a href="http://www.joyitsai.cn" target="_blank">þþþAVƬ</a>| <a href="http://www.mdz8.cn" target="_blank">þ99ëƬѹۿ </a>| <a href="http://www.mlbj.net.cn" target="_blank">ŷ޹׾þþþþþ</a>| <a href="http://www.baolaiqi.com.cn" target="_blank">ȾþùþƷ</a>| <a href="http://www.lenticular3d.cn" target="_blank">þۺɫˮ99ž</a>| <a href="http://www.zhaopf.com.cn" target="_blank">ŮþþŮ</a>| <a href="http://www.hnwjzd.com.cn" target="_blank">99þþƷ</a>| <a href="http://www.acmpm.cn" target="_blank">ɫ͵͵88ŷƷþþ</a>| <a href="http://www.6ird.cn" target="_blank">ɫþþۺľþav</a>| <a href="http://www.4091.com.cn" target="_blank">Ʒþþþþþþ </a>| <a href="http://www.ltbhs.com.cn" target="_blank">˾þô߽AVɫɫ</a>| <a href="http://www.vbzc.cn" target="_blank">99þ뾫Ʒϵ</a>| <a href="http://www.hyzjlib.cn" target="_blank">þþƷһӰԺ</a>| <a href="http://www.988o.cn" target="_blank">˳ŷþ</a>| <a href="http://www.yuyoo.com.cn" target="_blank">þ99Ƶ</a>| <a href="http://www.baaag.cn" target="_blank">ƷŮ߳׾þþ</a>| <a href="http://www.xishuixian.com.cn" target="_blank">Сڵþþþþ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>