??xml version="1.0" encoding="utf-8" standalone="yes"?>久久线看观看精品香蕉国产,久久久久高潮综合影院,亚洲国产成人精品久久久国产成人一区二区三区综 http://www.shnenglu.com/kb/category/53.html?是沉睡着的水......zh-cnTue, 20 May 2008 03:17:58 GMTTue, 20 May 2008 03:17:58 GMT60Q讨论]关于注释的书写位|?/title><link>http://www.shnenglu.com/kb/archive/2006/04/21/6029.html</link><dc:creator>可冰</dc:creator><author>可冰</author><pubDate>Fri, 21 Apr 2006 07:20:00 GMT</pubDate><guid>http://www.shnenglu.com/kb/archive/2006/04/21/6029.html</guid><wfw:comment>http://www.shnenglu.com/kb/comments/6029.html</wfw:comment><comments>http://www.shnenglu.com/kb/archive/2006/04/21/6029.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/kb/comments/commentRss/6029.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/kb/services/trackbacks/6029.html</trackback:ping><description><![CDATA[ <font size="2"> <br />        在C/C++?变量?qing)函数的定义一般都是在.h/.hpp文g中说明原?而在对应?c/.cpp文g中来q行实现.<br />        q种情况?头文件最l是l用户用的,以便让用户了解有哪些接口可以使用;?c/.cpp文g是开发者用的,以便让其它开发h员了解它的实现逻辑.因此q两个文件中肯定都是需要详l的注释??h/.hpp文g?主要说明函数的用方?如参数的意义,q回值的定义{??c/.cpp文g?主要说明函数的实现逻辑{?<br /><br />        不知道上面的做法是否合?请大家指?<br />        另外,大家在实际编E过E中是如何做?<br /><br />        事实?我自己在实践q程中却L偏向于把注释写到一个地?或者注释原?或者注释实?前者比较多),甚至q脆两边都写一L(fng)(但这L(fng)话内容经怼(x)不一?.q样的方法让我在~程q程中吃?yu)了苦头?</font> <br /> <img src ="http://www.shnenglu.com/kb/aggbug/6029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/kb/" target="_blank">可冰</a> 2006-04-21 15:20 <a href="http://www.shnenglu.com/kb/archive/2006/04/21/6029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++~码规范http://www.shnenglu.com/kb/archive/2005/11/22/1240.html可冰可冰Tue, 22 Nov 2005 05:46:00 GMThttp://www.shnenglu.com/kb/archive/2005/11/22/1240.htmlhttp://www.shnenglu.com/kb/comments/1240.htmlhttp://www.shnenglu.com/kb/archive/2005/11/22/1240.html#Feedback7http://www.shnenglu.com/kb/comments/commentRss/1240.htmlhttp://www.shnenglu.com/kb/services/trackbacks/1240.html//自己译的,本想整理一下,但一直没旉Q现在就q样放上来吧Q有错就批,别客气,呵呵?/font>

C++~码规范

一、组l与{略问题

If builders built buildings the way programmers wrote programs, then the
first woodpecker that came along would destroy civilization.
----Gerald Weinberg
在C和C++的主要传l中,我们认ؓ(f)是一U零基础的习(fn)?W?条是一个根本的指示,它涵盖了~码规范中我们认为是最基本的徏?
在这介绍性的一节的其余部分?我们_ֿ选取了其中的量问题加以阐述,q些大多与编码本w无直接关系,但却是写出可靠代码的基本工具和技?
在这一节中我们认ؓ(f)最有h(hun)值的是第0条不要因失?(?知道什么不需要规范化.)

0. 不要因小失大. (?知道什么不需要规范化.)

摘要

仅说必要的话:不要坚持个h品味或陈旧的?fn)?

讨论

真只是个人品味且不媄响正性或可读性的l论不属于编码标?M专业E序员可以很Ҏ(gu)地读写稍微不同于他所?fn)惯的格式的代?
在每个源文g甚至每个工程中都要用一致的格式,因ؓ(f)在几U不同编码风格的代码片段中蟩转是很不协调?但是不要企图在不同项目或公司中坚持一致地格式.
下面是几条通用的结?q里重要的不是去制定规则,而只是要保持与你l护的文件的风格的一?
不必明确指定要羃q多?但要~进以突出结?用你喜欢的Q意数量的I格~进,但至要在同一文g中保持一?
不必保持特定的行长度,但要保持行具有可L?用你喜欢的Q意长度的行长,但不要太长了.研究表明十个单词以内的宽度对眼睛跟踪是最理想?
不要q度制定命名规则,但要用一致的命名U定:仅有两点必须要做?a)决不?隐秘?名称,也即以一个下划线开头或包括双下划线的名U?以及(qing)b)L用字母全部大写的单词命名宏ƈ且决不要考虑定义一个常用或~写单词的宏(包括常用模板参数,比如T和U;?define T anything定义M东西是极其不好的做法).此外,要用一致的有意义的名称,q按照文件或模块的约?(若你不能军_你自q命名U定,试试q种方式Q以各单词首字母大写方式命名cR函数和枚D(LikeThis);命名变量时在前者基上小写第一个单词的首字?likeThis);命名U有成员变量时在前者方式之后再加一个下划线(linkThis_);以全大写q用一个下划线q接各单词的方式命名?LINK_THIS).)
不要规定注释的风?除非有工兯析特定格式的注释生成文档),但要写有用的注释:如果可以的话以代码来代替注释(?a href="#item16">W?6?/a>).不要在注释中重复代码;它们不能被同步维?要写解释Ҏ(gu)和基本原理的启发性的注释.
最?不要试图坚持陈旧的规??a href="#0_3">??a href="#0_4">?),即它们曑֜旧编码规范出现过.

例子

  • ?:括号的放|?下面的几U没有Q何可L上的差?
    void using_k_and_r_style() {
    // K&R风格
    }

    void putting_each_brace_on_its_own_line()
    {
    // 括号独占一?br>}

    void or_putting_each_brace_on_its_own_line_indented()
    {
    // 括号独占一行ƈ~进
    }
    M专业E序员都可以不费力地d上面所列的M一U风格的代码.但要保持一致?不要随意的或以晦涩的嵌套方式攄括号,试着去遵循各文g中已有的风格.在本书中,我们的括h意识的在排版的约束中以最好的可读性的来放|?
  • ?: I格与制表符.׃~辑器对制表W解释的不同,它可能被误用,或被理解成凸?或无~进,q种情况下一些团队合理地选择用制表W?其他同样有名望的团队则合理地允许制表W?而采用纪律来避免其潜在缺?只要保持一致?当团队成员维护其他h的代码时,如果你允怋用制表符,保不要以代码清晰度和可Lؓ(f)代h(hun)(?a href="#item6">W??/a>).如果你禁用制表符,允许~辑器在d源文件时空D{换成制表W?以便用户可以在编辑器中用制表符;但要保写回文g的时候将它们q原为空?
  • ?: 匈牙利命名法. 类型信息合q到变量名称中的命名方式为类型不安全的语a(其是C)带来了一些؜合的作用.但这U命名法在面向对象语a中没有好?只有坏处),其在泛型编E中是根本不可能?因此,不会(x)有哪个C++~码规范?x)要求用匈牙利命名?C++~码规范可能合理地将其排除在?
  • ?: 单入?单出?"SESE"). 历史?一些编码规范要求每个函数有且仅有一个出?也即一个返回语?q样的要求在支持异常与析构函数的语言中是q时?在这些语a?函数通常都会(x)有许多隐式的出口.取而代之的?按照像第5条那L(fng)接提倡更短的函数的标?q样?x)很自然地具有更?gu)理解代码和把握错误的Ҏ(gu)?

    参?/h3>
    [BoostLRG] · [Brooks95] $12 · [Constantine95] $29 · [Keffer95] p. 1 ·
    [Kernighan99] $1.1, $1.3, $1.6-7 · [Lakos96] $1.4.1, $2.7 · [McConnell93]
    $9, $19 · [Stroustrup94] $4.2-3 · [Stroustrup00] $4.9.3, $6.4, $7.8, $C.1
    · [Sutter00] $6, $20 · [SuttHysl01]

    1. 以高警告U别q净地编?/h2>

    摘要

    警告铭C?使用你的~译器的最高警告?要求q净(无警?的构?理解全部的警?q过修改代码消除警告,而不是通过降低警告U别.

    讨论

    ~译器是你的好朋?若它׃一个特定的l构而发Z个警?通常你的代码含有潜在的问?
    成功构徏应该是干净?无警告的).如若不是q样,你将?x)很快养成快速浏览输出结果的?fn)?q而你错q真正的问题.(?a href="#item2">W??/a>)
    消除警告: a)理解?然后b)更改你的代码L除警告ƈ让你惌它所做的事情对h和编译器都更清楚.
    一定要做这一?即一开始程序看h正确q行?或者即使你肯定警告是良性的.即是良性警告也可以使后面的指出真正危险的警告变得隐?

    例子

  • ?: W三方头文g.你不可能M改一个引?或许是良性的)警告的库头文?因此你要在你自己的头文g中包含原始头文gq仅在这个头文g的作用域内选择性的屏蔽掉这些烦人的警告,然后在你其它的项目文件中包含你的q个包装q的头文?例如(注意q里的警告控制语法在~译器间是不同的):
    // 文g: myproj/my_lambda.h -- 包装Boost的lambda.hpp
    // L使用q个文g,而不直接使用lambda.hpp.
    // 注意: 我们的构建现在自动检? "grep lambda.hpp ".
    // Boost.Lambda产生我们所知道的无害的~译警告.
    // 当作者修正它时我们将U除下面?pragma语句,但是q个头文件仍存?
    //
    #pragma warning(push) // 仅屏蔽这个头文g
    #pragma warning(disable:4512)
    #pragma warning(disable:4180)
    #include #pragma warning(pop) // 恢复原来的警告?
  • ?: "未用过的函数参?"查以保你真的不打算用这个函数参?例如:它可能是占位W以便将来扩?或是你代码中从未用到但却是必需的标准化函数{֐的一部分).如若它不是必需?只要删除q个函数参数p?
    // ?不用提C的用户自定义分配器内部 ?br>
    // 警告: "unused parameter 'localityHint'"
    pointer allocate( size_type numObjects, const void *localityHint = 0 ) {
    return static_cast( mallocShared( numObjects * sizeof(T) ) );
    }

    // 新版? 消除警告
    pointer allocate( size_type numObjects, const void * /* localityHint */ = 0 ) {
    return static_cast( mallocShared( numObjects * sizeof(T) ));
    }
  • ?: "变量定义了但却从未?"查确保你真的不想引用q个变量.(一个基于栈的RAII对象l常引vq样的不合理的警?误W?3?/a>.)如若它不是必需?通常你可以插入一个变量自求值的表达式ɾ~译器安?q一求g?x)对q行旉度有媄?:
    // 警告: "变量'lock'定义了但却从未?"
    void Fun() {
    Lock lock;

    // ?br>
    }

    // 新版? 消除了警?br>void Fun() {
    Lock lock;
    lock;

    // ?br>
    }
  • ?: "可能使用了未初始化的变量."那就初始化这个变??a href="#item19">W?9?/a>).
  • ?: "丢失q回语句."即你的控制永q也不可能到辑և数的末尾,~译器有时也?x)要求有一个返回语?例如无限循环、异常抛句以?qing)其它类型的q回语句).q也许是一件好?因ؓ(f)有时你只是认为控制流不会(x)q行到末?例如无default的switch语句没有修改的弹?因些要有一个default语句执行assert( false ) (另见W?a href="#item68">68?a href="#item90">90?:
    // 警告: 丢失"return"
    int Fun( Color c ) {
    switch( c ) {
    case Red: return 2;
    case Green: return 0;
    case Blue:
    case Black: return 1;
    }
    }

    // 新版? 消除警告
    int Fun( Color c ) {
    switch( c ) {
    case Red: return 2;
    case Green: return 0;
    case Blue:
    case Black: return 1;
    default: assert( !"should never get here!" ); // !"string"的gؓ(f)false
    return -1;
    }
    }
  • ?: "有符?无符号不匚w."有符h与无W号C间的比较与赋值通常不是必需?改变参与比较的变量的cd以满cd匚w要求.最坏情况下,插入一个显式{?(׃~译器ؓ(f)你插入这L(fng)转换,也会(x)警告你它所做的,所以你最好不要让它出?)

    例外

    有时~译器可能发Z个厌烦的甚至ƺ骗性的警告(比如Ua(b)的扰׃?,但没有可提供的方法去消除?而且M改代码去消除它可能是不可实现的或是徒劳的工作.在这些罕见的情况?作ؓ(f)一个团队决{?除去q个只是无聊的警告的烦h的工作是:仅特定警告无效,q尽可能是局部性的,q写一个清晰的注释文档说明Z么这样做是必要的.

    参?/h3>
    [Meyers97] $48 · [Stroustrup94] $2.6.2

    2. 使用自动构徏pȝ

    摘要

    ?单个)按钮:使用一个无需用户参与的全自动("一键触?)构徏pȝ.

    讨论

    一个一键触发式构徏Ҏ(gu)是基本的.它必进行可靠的和可重复的{?你的源文g转换为可交付的程序包.有很多自动构建工具可以?没有理由不去用它.挑选一?使用?
    我们已见q一些忽视了"一键触?式要求的l织.一些h认ؓ(f)随处点几下鼠?可以运行一些工h注册COM/CORBA服务,或通过手工定制的一个合理构E拷贝一些文?但是你没有时间和_֊可以费在一些机器能做得更好更快的事情上.你需要一键触发式的自动化的和可靠的构?
    成功的构建应该是没有M警告?见第1?.理想化的构徏不生扰׃?而仅是一个日志消?"构徏成功完成."
    有两个构建模?增量构徏和完全构?增量构徏仅重上自增量构徏或完全构Z来被修改q的文g.推论:两个q箋的增量构Z的后者应该没有Q何输出文?如果有的?你可能有一个依赖环(见第22?,或者你的构建系l执行了不必要的操作(例如生成不合理的临时文g而只是丢弃它?.
    一个工E可以有不同形式的完全构?考虑用一pd本质的特征确定你的构建的参数;很可能候选者就是目标式体系l构、调试和发布、或更广(基本文g和全部文件和完全安装).一个构|可以创Z个品的基本的可执行文g和库,另一个可能也创徏一些辅助文?一个完全充实的构徏也可能创Z个包含你所有文件、可重发布的W三方库和安装代码的安装E序.
    随着工程的进?没有自动构徏的花费也在增?如果你一开始没有用,你将费很多旉和资?更糟p的?随着自动构徏成ؓ(f)无法抉|的需?你将?x)有比项目一开始更多的压力.
    大项目可能有一?构徏?ȝ",他的工作是照料构徏pȝ.

    参?/h3>
    [Brooks95] $13, $19 · [Dewhurst03] $1 · [GnuMake] · [Stroustrup00] $9.1

    3. 使用一个版本控制系l?/h2>

    摘要

    好记性比不上烂笔?使用一个版本控制系l?VCS).决不要让出的文g保留很长旉.一旦你的更新的单元通过试尽快检?保入的代码不会(x)破坏整个构徏.

    讨论

    几乎所有不q_的工E都需要一个以上的开发者和/或超q一周的工作?在这L(fng)工程?你将需要比较同一文g的历史版本以定变化是什么时??或被?引入?你也需要控制和理源代码的变化.
    当有多个开发者时,几个开发者很可能?x)在同一旉对同一文g的不同部分进行ƈ行地更改.你需要工具以自动q行文g的检出和恢复,以及(qing)在某些时候对q发~辑的合q?VCS自动操作和控制检?恢复以及(qing)合ƈ.VCS比手工做的更快更准确.而且你不用花旉每天的去摆弄那些重复性的工作,你有软g要写.
    不要破坏构徏.在VCS中的代码必须L可以成功构徏?
    存在很多的版本控制系l可供选择,没有理由不去用它.最便宜和流行的是cvs(见参?.它是一个灵zȝ工具,兯TCP/IP讉KҎ(gu)?可选择性的提高安全?通过用安全外壳SSH作ؓ(f)后端),卓越的脚本管?甚至有图形接?许多其它VCS也将cvs作ؓ(f)标准L?或基于它构徏新的功能.

    例外

    从始至终只花一周左x间的一个程序员的项目或许可以不需要VCS而生存吧.

    参?/h3>
    [BetterSCM] · [Brooks95] $11, $13 · [CVS]

    4. 在代码审阅上作投?/h2>

    摘要

    代码审阅:更多双眼睛将?x)带来更好的质?展示你的代码,qM人的.你们都将怺学习(fn)或受?

    讨论

    一个良好的代码审阅q程在许多方面都对你的团队有好处.它可?
  • 有益的^{的压力可以增加代码质量.
  • 可以扑ֈbugs、移植性不好的代码以及(qing)潜在的度量问?
  • 通过思想的互补培dŞ成的设计和实?
  • 带动新成员和初者迅速提升能?
  • 在团队中形成共同价值和团队意识.
  • 增加_英、信心、动机和专业自豪?
  • 许多开发商既不对代码质量和团队质量q行奖赏,也不投入旉和金钱鼓׃?希望我们从现在v几年都不?x)食a,但我们感觉到q种势正在慢慢改变,部分原因是由于对安全软g的需求的增长.代码审阅正有助于q种势,另外也是一个极好的(和免费的)内部训练Ҏ(gu).
    即你的雇主q不支持代码审阅Ҏ(gu),你也要增加管理知?提示:要开?l他们看q本?以及(qing)无论如何要尽你最大努力去安排旉q引导审阅的q行.q时间是值得q.
    代码审阅作Z的Y件开发周期的一常规程?如果你和你的队友赞同ZȀ?也可能是挫折)的奖惩制?׃(x)好得?
    不要做得太Ş式化?写一简单的邮gp够将代码审阅做得很好?q会(x)使你更容易跟t自qq程以及(qing)避免重复.
    当审阅他人的代码?你可能想在旁边保留一个供参考的清单.H以Z个好的清单可能正是你正在ȝq本书的目录?满意?
    摘要:我们知道我们在给"p?布道,但是不得不说.你们的自负或自我M也许讨厌代码审阅,但你们中的少量天才程序员喜欢?因ؓ(f)它会(x)有成效ƈ使代码更?使程序更强健.

    参?/h3>
    [Constantine95] $10, $22, $33 · [McConnell93] $24 · [MozillaCRFAQ]



  • 可冰 2005-11-22 13:46 发表评论
    ]]>
    评h(hun)一下UTF-8与UNICODE怺转换的代?/title><link>http://www.shnenglu.com/kb/archive/2005/09/29/491.html</link><dc:creator>可冰</dc:creator><author>可冰</author><pubDate>Thu, 29 Sep 2005 12:34:00 GMT</pubDate><guid>http://www.shnenglu.com/kb/archive/2005/09/29/491.html</guid><wfw:comment>http://www.shnenglu.com/kb/comments/491.html</wfw:comment><comments>http://www.shnenglu.com/kb/archive/2005/09/29/491.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.shnenglu.com/kb/comments/commentRss/491.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/kb/services/trackbacks/491.html</trackback:ping><description><![CDATA[<font color="#000000" face="Verdana" size="2">上周,我花了很多心思用模板写了一个UTF-8与UNICODE怺转换的功?见文?/font><a ><font color="#000080" face="Verdana" size="2">code.rar</font></a><font color="#000000" face="Verdana" size="2">),刚开始感觉还可以,但这几天慢慢的觉?Z么不直接提供两个函数?q样不是单方便吗?我这L(fng)设计又能带来额外的什么好处呢?刚开始我是想提供比较方便好用以及(qing)Ҏ(gu)扩展与维护的代码,但现在感觉到与直接提供C式的函数q没有多额外的好处.或许q样的简单功能根本就用不着q样复杂的代码吧.正如Eric Raymond对C++的评价一??使程序员們֐于写复杂的代?.<br>我想大家看看我的代码,l我一Ҏ(gu)见和.</font><img src ="http://www.shnenglu.com/kb/aggbug/491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/kb/" target="_blank">可冰</a> 2005-09-29 20:34 <a href="http://www.shnenglu.com/kb/archive/2005/09/29/491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于模板的类型参?/title><link>http://www.shnenglu.com/kb/archive/2005/09/29/490.html</link><dc:creator>可冰</dc:creator><author>可冰</author><pubDate>Thu, 29 Sep 2005 11:51:00 GMT</pubDate><guid>http://www.shnenglu.com/kb/archive/2005/09/29/490.html</guid><wfw:comment>http://www.shnenglu.com/kb/comments/490.html</wfw:comment><comments>http://www.shnenglu.com/kb/archive/2005/09/29/490.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.shnenglu.com/kb/comments/commentRss/490.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/kb/services/trackbacks/490.html</trackback:ping><description><![CDATA[<FONT face=Verdana size=2>看了cpunion写的IDL的代?我知道了q样的用?<BR>在模板参C,cd参数可以q样构?<BR>        template_class< type( type1, type2, ... ) > a_class;<BR>比如,可以void( void ), void(), void( int ), 也可以int( void ), string( int ){等,~译器是它们当作不同的cd的来处理?Ҏ(gu),我写了一些代码作了一下测?见文?.但我也仅仅是有一个感性的认识而已,对于其ؓ(f)什么可以这?因ؓ(f)从未见哪本书上介l过q样的用?,我一点也不知?<BR>希望大家帮我释疑,也希望cpunion来帮我一?谢谢!<BR><BR> <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"><BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>#include </SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">></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>typedef </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">fun)(</SPAN><SPAN style="COLOR: #0000ff">int</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><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000"> std;<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>template</SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> <FONT color=#0000ff>typename</FONT> T </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: #0000ff">struct</SPAN><SPAN style="COLOR: #000000"> Base<BR><IMG id=Codehighlighter1_105_214_Open_Image onclick="this.style.display='none'; Codehighlighter1_105_214_Open_Text.style.display='none'; Codehighlighter1_105_214_Closed_Image.style.display='inline'; Codehighlighter1_105_214_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_105_214_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_105_214_Closed_Text.style.display='none'; Codehighlighter1_105_214_Open_Image.style.display='inline'; Codehighlighter1_105_214_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_105_214_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_105_214_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test()<BR><IMG id=Codehighlighter1_121_212_Open_Image onclick="this.style.display='none'; Codehighlighter1_121_212_Open_Text.style.display='none'; Codehighlighter1_121_212_Closed_Image.style.display='inline'; Codehighlighter1_121_212_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_121_212_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_121_212_Closed_Text.style.display='none'; Codehighlighter1_121_212_Open_Image.style.display='inline'; Codehighlighter1_121_212_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN id=Codehighlighter1_121_212_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_121_212_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>        cout </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Base<T></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">\t=\t</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>        cout </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Base<</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> <FONT color=#0000ff>typeid</FONT>(T).name() </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> endl;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</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>template</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: #0000ff">struct</SPAN><SPAN style="COLOR: #000000"> Base </SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_250_303_Open_Image onclick="this.style.display='none'; Codehighlighter1_250_303_Open_Text.style.display='none'; Codehighlighter1_250_303_Closed_Image.style.display='inline'; Codehighlighter1_250_303_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_250_303_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_250_303_Closed_Text.style.display='none'; Codehighlighter1_250_303_Open_Image.style.display='inline'; Codehighlighter1_250_303_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_250_303_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_250_303_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test()<BR><IMG id=Codehighlighter1_266_301_Open_Image onclick="this.style.display='none'; Codehighlighter1_266_301_Open_Text.style.display='none'; Codehighlighter1_266_301_Closed_Image.style.display='inline'; Codehighlighter1_266_301_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_266_301_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_266_301_Closed_Text.style.display='none'; Codehighlighter1_266_301_Open_Image.style.display='inline'; Codehighlighter1_266_301_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN id=Codehighlighter1_266_301_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_266_301_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>        cout </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Base<void></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> endl;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</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>template</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: #0000ff">struct</SPAN><SPAN style="COLOR: #000000"> Base </SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">( </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> ) </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_346_404_Open_Image onclick="this.style.display='none'; Codehighlighter1_346_404_Open_Text.style.display='none'; Codehighlighter1_346_404_Closed_Image.style.display='inline'; Codehighlighter1_346_404_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_346_404_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_346_404_Closed_Text.style.display='none'; Codehighlighter1_346_404_Open_Image.style.display='inline'; Codehighlighter1_346_404_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_346_404_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_346_404_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test()<BR><IMG id=Codehighlighter1_362_402_Open_Image onclick="this.style.display='none'; Codehighlighter1_362_402_Open_Text.style.display='none'; Codehighlighter1_362_402_Closed_Image.style.display='inline'; Codehighlighter1_362_402_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_362_402_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_362_402_Closed_Text.style.display='none'; Codehighlighter1_362_402_Open_Image.style.display='inline'; Codehighlighter1_362_402_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN id=Codehighlighter1_362_402_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_362_402_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>        cout </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Base<void(int)></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> endl;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</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>template</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: #0000ff">struct</SPAN><SPAN style="COLOR: #000000"> Base </SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> fun </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_439_491_Open_Image onclick="this.style.display='none'; Codehighlighter1_439_491_Open_Text.style.display='none'; Codehighlighter1_439_491_Closed_Image.style.display='inline'; Codehighlighter1_439_491_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_439_491_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_439_491_Closed_Text.style.display='none'; Codehighlighter1_439_491_Open_Image.style.display='inline'; Codehighlighter1_439_491_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_439_491_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_439_491_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test()<BR><IMG id=Codehighlighter1_455_489_Open_Image onclick="this.style.display='none'; Codehighlighter1_455_489_Open_Text.style.display='none'; Codehighlighter1_455_489_Closed_Image.style.display='inline'; Codehighlighter1_455_489_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_455_489_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_455_489_Closed_Text.style.display='none'; Codehighlighter1_455_489_Open_Image.style.display='inline'; Codehighlighter1_455_489_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN id=Codehighlighter1_455_489_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_455_489_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>        cout </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Base<fun></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> endl;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</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>template</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: #0000ff">struct</SPAN><SPAN style="COLOR: #000000"> Base </SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">( </SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000"> ) </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_547_616_Open_Image onclick="this.style.display='none'; Codehighlighter1_547_616_Open_Text.style.display='none'; Codehighlighter1_547_616_Closed_Image.style.display='inline'; Codehighlighter1_547_616_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_547_616_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_547_616_Closed_Text.style.display='none'; Codehighlighter1_547_616_Open_Image.style.display='inline'; Codehighlighter1_547_616_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_547_616_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_547_616_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test()<BR><IMG id=Codehighlighter1_563_614_Open_Image onclick="this.style.display='none'; Codehighlighter1_563_614_Open_Text.style.display='none'; Codehighlighter1_563_614_Closed_Image.style.display='inline'; Codehighlighter1_563_614_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_563_614_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_563_614_Closed_Text.style.display='none'; Codehighlighter1_563_614_Open_Image.style.display='inline'; Codehighlighter1_563_614_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN id=Codehighlighter1_563_614_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_563_614_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>        cout </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Base<int(string,int,char)></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000"><<</SPAN><SPAN style="COLOR: #000000"> endl;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</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><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> main(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> argc, </SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000"> argv[])<BR><IMG id=Codehighlighter1_653_943_Open_Image onclick="this.style.display='none'; Codehighlighter1_653_943_Open_Text.style.display='none'; Codehighlighter1_653_943_Closed_Image.style.display='inline'; Codehighlighter1_653_943_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_653_943_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_653_943_Closed_Text.style.display='none'; Codehighlighter1_653_943_Open_Image.style.display='inline'; Codehighlighter1_653_943_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_653_943_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_653_943_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    Base</SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> b_void;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    Base</SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">( </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> ) </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> b_void_int;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    b_void.test();<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    b_void_int.test();<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>    Base</SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">( </SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000"> ) </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> b_int;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    Base</SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> fun </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> b_fun;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    b_int.test();<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    b_fun.test();<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><BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    Base</SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> Base</SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> ( Base </SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> ( </SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000"> ) </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> ) </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> b_complex;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    b_complex.test();<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">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">0</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></FONT><img src ="http://www.shnenglu.com/kb/aggbug/490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/kb/" target="_blank">可冰</a> 2005-09-29 19:51 <a href="http://www.shnenglu.com/kb/archive/2005/09/29/490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>error C2899: 不能在模板声明之外用类型名U??!!http://www.shnenglu.com/kb/archive/2005/09/24/414.html可冰可冰Sat, 24 Sep 2005 07:49:00 GMThttp://www.shnenglu.com/kb/archive/2005/09/24/414.htmlhttp://www.shnenglu.com/kb/comments/414.htmlhttp://www.shnenglu.com/kb/archive/2005/09/24/414.html#Feedback5http://www.shnenglu.com/kb/comments/commentRss/414.htmlhttp://www.shnenglu.com/kb/services/trackbacks/414.html前天到一个问?当时想着挺纳L(fng),不知道是什么原??不能在模板声明之外用类型名U?q样的提CZ?x)想到是什?我在无意中按F1键看到MSDN中的描述才明白是typename关键字用错了,是看它的英文描述才知道的:"typename cannot be used outside a template declaration".真想不到typename?x)翻译?f)cd名称.看来,以后有莫名其妙的错误q是得看英文的帮助文档啊,不过最好一开始就有英文版的VS.NET.
    以下是具体的描述:

    namespace code
    {

    enum CodeType { UTF_8, UNICODE }
    ;

    template
    < CodeType srcT, CodeType desT >

    struct ConvertType{};

    template
    <>

    struct ConvertType < UTF_8, UNICODE >
    {
        typedef 
    char
     srcType;
        typedef wchar_t desType;
    }
    ;

    template
    < CodeType srcT, CodeType desT >

    struct Convert {};

    template
    <>

    struct Convert< UTF_8, UNICODE >
    {
        
    //error C2899: 不能在模板声明之外用类型名U?/SPAN>

        typedef typename ConvertType< UTF_8, UNICODE >::srcType srcType;    //!
        typedef typename ConvertType< UTF_8, UNICODE >::desType desType;    //!
    }
    ;

    }
     //namespace code


    /*
    q里Ҏ(gu)不需要typename.
    typename除用在模板声明中?只能用于说明模板cȝ成员是一个类?
    例如:
    template class X {};

    // Another way
    template struct X {
        typedef double DoubleType;

        typename X::DoubleType a;   // T::A is a type
    };

    而如果不是模板类,则不能用typename.q时,它ƈ不是多余?而是一定不能要?
    例如:
    template<> struct X< X > {
        typename X::DoubleType a;    //Error! X is not a generic class
        X::DoubleType b;        //OK!
    };

    我前面的代码也是q样的情?ConvertType< UTF_8, UNICODE >已经是一个具体的cM,不要是模板类,所以ConvertType< UTF_8, UNICODE >::srcType前不能加typename.
    */


    可冰 2005-09-24 15:49 发表评论
    ]]>
    构思UTF-8解码模块http://www.shnenglu.com/kb/archive/2005/09/22/399.html可冰可冰Thu, 22 Sep 2005 15:24:00 GMThttp://www.shnenglu.com/kb/archive/2005/09/22/399.htmlhttp://www.shnenglu.com/kb/comments/399.htmlhttp://www.shnenglu.com/kb/archive/2005/09/22/399.html#Feedback1http://www.shnenglu.com/kb/comments/commentRss/399.htmlhttp://www.shnenglu.com/kb/services/trackbacks/399.html 惛_C个解码UTF-8格式文档为Unicode格式代码?引擎",要用h方便手.
    但想了几天了,都没有一个合适的Ҏ(gu)来实?
    ?.....
    今天先试着写了?找找感觉,接着再想?..



    可冰 2005-09-22 23:24 发表评论
    ]]>
    std::wfstream是怎么支持宽字W的?http://www.shnenglu.com/kb/archive/2005/09/22/396.html可冰可冰Thu, 22 Sep 2005 14:47:00 GMThttp://www.shnenglu.com/kb/archive/2005/09/22/396.htmlhttp://www.shnenglu.com/kb/comments/396.htmlhttp://www.shnenglu.com/kb/archive/2005/09/22/396.html#Feedback4http://www.shnenglu.com/kb/comments/commentRss/396.htmlhttp://www.shnenglu.com/kb/services/trackbacks/396.html
    std::wfstream的定义ؓ(f):
    typedef basic_fstream<wchar_t, char_traits<wchar_t> > wfstream;
    在读取字W时:
    wfstream wfile( "wcharfile.txt" );
    wchar_t wch = wfile.get();
    按语义讲应该是读入两个字节内容的.但经输出?它却只读入一个字?q样和fstreamq有什么分?
    到底在处理Unicode~码的文件时,应该如何使用宽字W流?


    可冰 2005-09-22 22:47 发表评论
    ]]>
    cL员变量封装的问题http://www.shnenglu.com/kb/archive/2005/09/18/300.html可冰可冰Sun, 18 Sep 2005 10:19:00 GMThttp://www.shnenglu.com/kb/archive/2005/09/18/300.htmlhttp://www.shnenglu.com/kb/comments/300.htmlhttp://www.shnenglu.com/kb/archive/2005/09/18/300.html#Feedback0http://www.shnenglu.com/kb/comments/commentRss/300.htmlhttp://www.shnenglu.com/kb/services/trackbacks/300.html  在类的设计中,Ҏ(gu)员变量的装是一个比较烦人的问题.什么时候应该提供读写的接口,什么时候应该声明ؓ(f)public,q样的问题有时候改几次也都不是很满意的.

      对变量的读写操作封装v来以接口的Ş式提?是有了一定的接口一致?如果以后要在d变量的操作内加入其它的操?那么原有的代码就可以不加M修改,只改q样的接口就行了.也就是对外部闭了细?使编E简单一?
    但我也觉得不能用"一刀?的方式将所有的成员变量都加以这L(fng)装,q样无疑?x)代码增?而且可能q有我所不知道的~点).

    ȝ来说,
      对于要对外部提供应用的变?最好以接口的Ş式提?q样可以有比较一致的接口.
      而如果只是内部用的?且只是用于保存变量的值的?直接声明为public?x)好一?而若在内部也是相对地为其它类提供服务的话,也还是要声明为接口要好一?

    q里所说的内部和外?只是相对来说?q不只是针对某个cLE序而言.具体来说要根据代码的聚合E序来看.

    最主要的原则还是要对具体的情况q要加以区别对待,Ҏ(gu)实际情况不同而施以不同的应用.

    ===========
    q样的问题主要还是靠~码l验?如果有经验的?可能凭感觉就可以随时军_?
    对于q个问题我也只是有这一点的初步见解(我几乎没有什么实际的~码l验),也不知道合不合?希望有牛人可以加以指?


    可冰 2005-09-18 18:19 发表评论
    ]]>
    目前C++可以实现跨^台吗http://www.shnenglu.com/kb/archive/2005/09/14/271.html可冰可冰Wed, 14 Sep 2005 15:30:00 GMThttp://www.shnenglu.com/kb/archive/2005/09/14/271.htmlhttp://www.shnenglu.com/kb/comments/271.htmlhttp://www.shnenglu.com/kb/archive/2005/09/14/271.html#Feedback7http://www.shnenglu.com/kb/comments/commentRss/271.htmlhttp://www.shnenglu.com/kb/services/trackbacks/271.html大家都知道现在C/C++的编译是分ؓ(f)两个部分?即编译和q接:源文件经~译后生成目标文?然后再连接ؓ(f)可执行文?
    我对q两个阶D要做的工作q没有了?所以我现在可以q样设想(也有可能是无知的设想):
    以一U标准的方式定义目标文g的格?使之在各操作pȝ上生成的目标文g完全一?而且都可以在相应的^Cq行正确的连?q样的话,q当于是一个中间层ơ的可移植性了.其实,如果q样不行的话也可以像JAVA那样生成一定格式的"字节?文g,然后再进行编译连?
    如果可以连接的一部分功能l合到操作系l内?实现动态的q接,q样可以实现类似动态装载的Ҏ(gu)了.
    但这个要实现的话需要有一个大的投资方或者开源社q共同努力才能实现?
    所以现在这L(fng)xq是I想?

    不过我想,事物都是发展?我们的C++当然也不?x)例外?我相信C++?x)在不久也实现动态及(qing)完全的跨q_的特性的.希望q一天不?x)太q?


    可冰 2005-09-14 23:30 发表评论
    ]]>
    ɫۺϺϾþۺӿ| þŷƷ | 97Ʒ97þþþþ| Ʒ˾þþ| ҹþþþþýӰ| Ʒþþþþ| Ʒһþ| þﶼǾƷ| Ưޱ˾þþƷ| þ޾Ʒa| ƷۺϾþþþþ97| һaƬþëƬ16| þۺƵ| þþžѾƷ6| һɫۺþ| þ˽˹Ʒ| þ91Ʒ91þû| þþþþþŮú| ˳˳ۺþþ| ޹ƷƬþ| þþžžƷ99Ʒ| һһþaþþƷۺ | Ʒŷþþþ޹| ĻѾþ| ŷ޾ƷþþavӰ | ɫۺϾþۺۺ| þþþAVƬ| 97rþþƷ99| þþþùƷ۲ӰԺ| þþŮ붯ȺëƬ| þ| þþþþƷAV| VVþþ| ߳߳þþ91 | þֻоƷҳ| 2021ƷۺϾþ| þþƷ| þþþƷҰ| ղƷþþһ| þeֻйľƷ99 | 99þþƷ|