﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-加文-文章分类-CEGUI</title><link>http://www.cppblog.com/MyCBlog/category/18995.html</link><description>希望是美好的……</description><language>zh-cn</language><lastBuildDate>Mon, 30 Apr 2012 02:15:00 GMT</lastBuildDate><pubDate>Mon, 30 Apr 2012 02:15:00 GMT</pubDate><ttl>60</ttl><item><title>xml 命名空间</title><link>http://www.cppblog.com/MyCBlog/articles/172581.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Tue, 24 Apr 2012 04:43:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/172581.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/172581.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/172581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/172581.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/172581.html</trackback:ping><description><![CDATA[<p style="margin-left:21.0pt;text-indent:-21.0pt;">1.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">有前缀和无前缀的命名空间</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">有前缀的命名空间：</span>Xmlns<span style="font-family:宋体;">：前缀</span>=<span style="font-family:宋体;">命名空间的名字；</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">无前缀的命名空间：</span>xmlns=<span style="font-family:宋体;">命名空间的名字</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">命名空间的前缀只是方便的引用命名空间而已，下面声明了三个不同的名称空间：</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">Xmlns:a=&#8221;Liaoning&#8221;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">Xmlns:a=&#8221;liaoning&#8221;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">Xmlns:b=&#8221;beijing&#8221;</p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">上面的&#8220;</span>liaoning<span style="font-family:宋体;">&#8221;，&#8220;</span>Liaoning<span style="font-family:宋体;">&#8221;属于不同的命名空间。</span></p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">2.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">标记中声明命名空间：</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;<span style="font-family:宋体;">张山</span> xmlns:p1=&#8221;liaoning&#8221;&gt;1990<span style="font-family:宋体;">年出生，大学毕业</span>&lt;/<span style="font-family:宋体;">张山</span>&gt;</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">3.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">名称空间的作用域</span></p>  <p style="margin-left:42.0pt;text-indent:-21.0pt;">a)<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">有前缀的命名空间</span></p>  <p style="margin-left:42.0pt;text-indent:0cm;">&lt;p1:<span style="font-family:宋体;">张山</span> xmlns:p1=&#8221;LiaoNing&#8221;&gt;</p>  <p style="margin-left:42.0pt; text-autospace:none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1976<span style="font-family:宋体;">年出生，大学毕业</span></p>  <p style="margin-left:42.0pt; text-autospace:none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p1:<span style="font-family:宋体;">张小山</span>&gt;</p>  <p style="margin-left:42.0pt; text-autospace:none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">在小学读书</span></p>  <p style="margin-left:42.0pt; text-autospace:none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p1:<span style="font-family:宋体;">张小山</span>&gt;</p>  <p style="margin-left:42.0pt; text-autospace:none">&lt;/p1:<span style="font-family: 宋体;">张山</span>&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;"><span style="font-family:宋体;">上述的标签，张山和张小山同属于一个命名空间</span>&#8220;LiaoNing&#8221;</p>  <p style="margin-left:42.0pt;text-indent:-21.0pt;">b)<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">无前缀的命名空间</span></p>  <p style="margin-left:42.0pt;text-indent:0cm;"><span style="font-family:宋体;">如果标记中声明的是无前缀的命名空间，那么该标记及其子标记都默认隶属于这个名称空间。线面的</span>xml<span style="font-family:宋体;">中，所有的标记都默认隶属于名字为：</span><a href="http://www.heimofang.com/">http://www.heimofang.com</a><span style="font-family:宋体;">的名称空间</span></p>  <p style="margin-left:42.0pt;text-indent:0cm;">&lt;book&gt;</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;java&gt;</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java<span style="font-family:宋体;">基础教程</span></p>  <p style="margin-left:42.0pt;text-indent:21.0pt">&lt;/java&gt;</p>  <p style="margin-left:42.0pt;text-indent:21.0pt">&lt;Jsp&gt;</p>  <p style="margin-left:42.0pt;text-indent:21.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jsp<span style="font-family:宋体;">基础教程</span></p>  <p style="margin-left:42.0pt;text-indent:21.0pt">&lt;/Jsp&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;">&lt;/book&gt;</p>  <p style="margin-left:42.0pt;text-indent:-21.0pt;">c)<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">尽管子标记可以通过引用父标记声明的有前缀的名称空间，但子标记也可以重新声明新的名称空间</span></p>  <p style="margin-left:42.0pt;text-indent:0cm;">&lt;?xml version=&#8221;1.0&#8221; encoding=&#8221;UTF-8&#8221;?&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;">&lt;p1:<span style="font-family:宋体;">张山</span> xmlns:p1=&#8221;Liaoning&#8221;&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1976<span style="font-family:宋体;">年出生，大学毕业</span></p>  <p style="margin-left:42.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p1:<span style="font-family:宋体;">张小山</span> xmlns:p1=&#8221;Americian&#8221;&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">在小学读书</span></p>  <p style="margin-left:42.0pt;">&lt;/p1:<span style="font-family:宋体;">张小山</span>&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;">&lt;/p1:<span style="font-family:宋体;">张山</span>&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;"><span style="font-family:宋体;">上述</span>xml<span style="font-family:宋体;">中的&#8220;张山&#8221;，&#8220;张小山&#8221;分别属于&#8220;</span>Liaoning<span style="font-family:宋体;">&#8221;和&#8220;</span>Americian<span style="font-family:宋体;">&#8221;名称空间，&#8220;张小山&#8221;通过</span>p1<span style="font-family:宋体;">引用的名称空间是该标记中自己声明的名称空间。</span></p>  <p style="margin-left:42.0pt;text-indent:-21.0pt;">d)<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">如果父标记声明的是无前缀的名称空间，子标记也可以重新声明名称空间</span></p>  <p style="margin-left:42.0pt;text-indent:0cm;">&lt;<span style="font-family:宋体;">张山</span> xmlns=&#8221;LiaoNing&#8221;&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1976<span style="font-family:宋体;">年出生，大学毕业</span></p>  <p style="margin-left:42.0pt;">&lt;<span style="font-family:宋体;">张小山</span> xmlns=&#8221;Beijing&#8221;&gt;</p>  <p style="margin-left:42.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">在小学读书</span></p>  <p style="margin-left:42.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p1:<span style="font-family:宋体;">张小山</span> xmlns:p1=&#8221;Americian&#8221;&gt;&lt;/p1:<span style="font-family:宋体;">张小山</span>&gt;</p>  <p style="margin-left:42.0pt;">&lt;/<span style="font-family:宋体;">张小山</span>&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;">&lt;/<span style="font-family:宋体;">张山</span>&gt;</p>  <p style="margin-left:42.0pt;text-indent:0cm;"><span style="font-family:宋体;">上述</span>xml<span style="font-family:宋体;">中的&#8220;张山&#8221;属于名字空间&#8220;</span>LiaoNing<span style="font-family:宋体;">&#8221;，两个名字相同的标记：&#8220;张小山&#8221;分别隶属于&#8220;</span>BeiJing<span style="font-family:宋体;">&#8221;和&#8220;</span>Americian<span style="font-family:宋体;">&#8221;名称相同。</span></p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">4.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">名称空间的名字</span></p>  <p style="margin-left:42.0pt;text-indent:0cm;"><span style="font-family:宋体;">名称空间的名字的目的是区分不同的标记，</span>w3c<span style="font-family:宋体;">推荐使用</span>URL</p><img src ="http://www.cppblog.com/MyCBlog/aggbug/172581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-24 12:43 <a href="http://www.cppblog.com/MyCBlog/articles/172581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml注释</title><link>http://www.cppblog.com/MyCBlog/articles/172566.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Tue, 24 Apr 2012 03:02:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/172566.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/172566.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/172566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/172566.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/172566.html</trackback:ping><description><![CDATA[<p>Xml<span style="font-family:宋体;">文件的注释和</span>html<span style="font-family:宋体;">相同，注释以&#8220;</span>&lt;!--<span style="font-family:宋体;">&#8221;开始，以&#8220;</span>&#8212;&gt;<span style="font-family:宋体;">&#8221;结束，</span>xml<span style="font-family:宋体;">解释器将忽略注释的内容，不对他们实施解析处理。比如：<br />&lt;?-- &nbsp; 这个是注释 &nbsp;--&gt;</span></p><img src ="http://www.cppblog.com/MyCBlog/aggbug/172566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-24 11:02 <a href="http://www.cppblog.com/MyCBlog/articles/172566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml 属性</title><link>http://www.cppblog.com/MyCBlog/articles/172563.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Tue, 24 Apr 2012 02:49:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/172563.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/172563.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/172563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/172563.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/172563.html</trackback:ping><description><![CDATA[<p style="margin-left:21.0pt;text-indent:-21.0pt;">1.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">属性的构成</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">属性是一个名值对，属性必须在费空标记的开始标记或者空标记中声明，语法如下：</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;?xml version=&#8221;1.0&#8221; encoding=&#8221;UTF-8&#8221;&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;root&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<span style="font-family:宋体;">桌子</span> width =&#8221;300&#8221; height = &#8220;600&#8221; length =&#8221;1000&#8221;&gt;<span style="font-family:宋体;">吃饭用的</span>&lt;/<span style="font-family:宋体;">桌子</span>&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<span style="font-family:宋体;">椅子</span> color=&#8221;red&#8221;/&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;/root&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">属性名字的命名规则和标记的命名规则相同。属性值是一个用单引号或者双引号括起来的字符串。</span></p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">2.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">使用属性的原则</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">属性不体现数据的结构，只是数据的附加信息，一个信息是否作为一个标记的属性或者作为该编辑的子标记，取决于具体的问题。</span></p><img src ="http://www.cppblog.com/MyCBlog/aggbug/172563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-24 10:49 <a href="http://www.cppblog.com/MyCBlog/articles/172563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标记的文本数据</title><link>http://www.cppblog.com/MyCBlog/articles/172562.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Tue, 24 Apr 2012 02:41:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/172562.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/172562.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/172562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/172562.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/172562.html</trackback:ping><description><![CDATA[<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="font-family:宋体;">一个标记的内容有两部分构成：文本数据部分，子标记部分。一个标记的文本数据中可以有普通字符、</span>CDATA<span style="font-family:宋体;">段、字符引用、实体引用。</span></p>  <p>&lt;?xml version=&#8221;1.0&#8221; encoding=&#8221;UTF-8&#8221; ?&gt;</p>  <p>&lt;root&gt;</p>  <p style="margin-left:21.0pt;">&lt;XML <span style="font-family:宋体;">例子</span>&gt;</p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">这是我写的一个例子！</span></p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;![CDATA[</p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;?xml version=&#8221;1.0&#8221; encoding=&#8221;UTF-8&#8221; ?&gt;</p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;employy&gt;</p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;</p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;<span style="font-family:宋体;">张小三</span>&amp;</p>  <p style="margin-left:63.0pt; text-indent:21.0pt">&lt;name&gt;</p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/employy&gt;</p>  <p style="margin-left:21.0pt; text-indent:21.0pt">]]&gt;</p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node&gt;</p>  <p style="margin-left:21.0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">这是子标记的文本内容！</span></p>  <p style="margin-left:21.0pt; text-indent:21.0pt">&lt;/node&gt;</p>  <p style="margin-left:21.0pt;">&lt;xml&gt;</p>  <p>&lt;/root&gt;</p><img src ="http://www.cppblog.com/MyCBlog/aggbug/172562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-24 10:41 <a href="http://www.cppblog.com/MyCBlog/articles/172562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CDATA段</title><link>http://www.cppblog.com/MyCBlog/articles/172558.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Tue, 24 Apr 2012 02:30:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/172558.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/172558.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/172558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/172558.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/172558.html</trackback:ping><description><![CDATA[<p>CDATA<span style="font-family:宋体;">段得开始符为&#8220;</span>&lt;![CDATA]<span style="font-family:宋体;">&#8221;</span>,<span style="font-family:宋体;">结束符为&#8220;</span>]]&gt;<span style="font-family:宋体;">&#8221;，以下为正确的</span>CDATA<span style="font-family:宋体;">段：</span></p>  <p>&lt;![CDATA] </p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Boolean boo = true&amp;&amp;false;</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<span style="font-family:宋体;">你好</span>&gt;</p>  <p>]]&gt;</p><img src ="http://www.cppblog.com/MyCBlog/aggbug/172558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-24 10:30 <a href="http://www.cppblog.com/MyCBlog/articles/172558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml特殊字符</title><link>http://www.cppblog.com/MyCBlog/articles/172504.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Mon, 23 Apr 2012 14:40:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/172504.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/172504.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/172504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/172504.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/172504.html</trackback:ping><description><![CDATA[<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Xml<span style="font-family:宋体;">有</span>5<span style="font-family:宋体;">种字符属于特殊字符：&#8220;</span>&lt;<span style="font-family:宋体;">&#8221;，&#8220;</span>&gt;<span style="font-family:宋体;">&#8221;，&#8220;</span>&amp;<span style="font-family:宋体;">&#8221;，&#8220;</span>&#8217;<span style="font-family:宋体;">&#8221;，&#8220;</span>&#8221;<span style="font-family:宋体;">&#8221;；对于这些特殊字符，</span>xml<span style="font-family:宋体;">有特殊的用途，比如标记使用</span>&#8221;&lt;&#8221;&#8221;&gt;&#8221;<span style="font-family:宋体;">表示。标记的内容有文本数据也标记，依照</span>w3C<span style="font-family:宋体;">的制定规范，文本数据中不可以包含特殊字符。</span></p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">要想在文本数据中包含这些特殊字符，办法之一是通过实体引用。</span>Xml<span style="font-family:宋体;">有五种预定义实体，实体引用格式如下：</span></p>  <p style="margin-left:63.1pt;text-indent:-21.0pt;">A.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;lt;<span style="font-family:宋体;">引用左尖括号&#8220;</span>&lt;<span style="font-family:宋体;">&#8221;</span></p>  <p style="margin-left:63.1pt;text-indent:-21.0pt;">B.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;gt<span style="font-family:宋体;">引用右尖括号&#8220;</span>&gt;<span style="font-family:宋体;">&#8221;</span></p>  <p style="margin-left:63.1pt;text-indent:-21.0pt;">C.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;apos,<span style="font-family:宋体;">引用单引号&#8220;&#8216;&#8221;</span></p>  <p style="margin-left:63.1pt;text-indent:-21.0pt;">D.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;quot<span style="font-family:宋体;">引用双引号&#8220;</span>&#8221;<span style="font-family:宋体;">&#8221;</span></p>  <p style="margin-left:63.1pt;text-indent:-21.0pt;">E.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;amp<span style="font-family:宋体;">引用与符号&#8220;</span>&amp;<span style="font-family:宋体;">&#8221;</span></p>  <p><span style="font-family:宋体;">解析器在解析标记的数据时，实体引用将被替换为引用的符号。对于有些特殊，比如希腊字符，我们无法从键盘输入，但是可以通过字符引用来解决，比如：</span>&#<span style="font-family:宋体;">开始引用的字符，使用代码点的十进制；</span>&#x<span style="font-family:宋体;">开始引用的字符，使用代码点的十六进制。</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p><img src ="http://www.cppblog.com/MyCBlog/aggbug/172504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-23 22:40 <a href="http://www.cppblog.com/MyCBlog/articles/172504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml标记</title><link>http://www.cppblog.com/MyCBlog/articles/172501.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Mon, 23 Apr 2012 14:29:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/172501.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/172501.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/172501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/172501.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/172501.html</trackback:ping><description><![CDATA[<p style="margin-left:21.0pt;text-indent:-21.0pt;">1.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">空标记</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;<span style="font-family:宋体;">张西欧</span> age=&#8221;24&#8221; sex=&#8221;<span style="font-family:宋体;">男</span>&#8221; /&gt;</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">2.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">非空标记</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;sex&gt;<span style="font-family:宋体;">男</span>&lt;/sex&gt;&nbsp;&nbsp;&nbsp; &lt;birthday&gt;1980<span style="font-family:宋体;">年</span>10<span style="font-family:宋体;">月</span>&lt;/birthday&gt;</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">3.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">非空标记的内容</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;?xml version=&#8221;1.0&#8221; encoding=&#8221;UTF-8&#8221; ?&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;root&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<span style="font-family:宋体;">游戏</span>&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">华容道</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;grade&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">初级</span></p>  <p style="margin-left:42.0pt;">&lt;/grade&gt;</p>  <p style="margin-left:42.0pt;"><span style="font-family:宋体;">我喜欢</span></p>  <p style="margin-left:21.0pt;">&lt;/<span style="font-family:宋体;">游戏</span>&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;/root&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">上述</span>xml<span style="font-family:宋体;">文件中，标记&#8220;游戏&#8221;的文本数据为：华容道，我喜欢；标记的子标记是</span>&lt;grade&gt;&lt;/grade&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">标记</span>&lt;<span style="font-family:宋体;">游戏</span>&gt;&lt;/<span style="font-family:宋体;">游戏</span>&gt;<span style="font-family:宋体;">的子标记是</span>grade<span style="font-family:宋体;">，该标记的文本内容是初级。</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">请读者注意，以下</span>3<span style="font-family:宋体;">个标记所标记的文本的内容是不同：</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;<span style="font-family:宋体;">名称</span>&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family:宋体;">电视</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;/<span style="font-family:宋体;">名称</span>&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;<span style="font-family:宋体;">名称</span>&gt;<span style="font-family:宋体;">电视</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;<span style="font-family:宋体;">名称</span>/&gt;</p>  <p style="margin-left:21.0pt;text-indent:0cm;">&lt;<span style="font-family:宋体;">名称</span>&gt;<span style="font-family:宋体;">电视</span>&lt;/<span style="font-family:宋体;">名称</span>&gt;</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">4.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">标记的名称</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;"><span style="font-family:宋体;">规则是：字母，数字，下划线，点，连字符组成。例如：</span>&lt;name&gt;Kevin&lt;/name&gt;<span style="font-family:宋体;">与</span>&lt;Name&gt;Kevin&lt;/Name&gt;</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">5.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">根标记</span></p>  <p style="margin-left:21.0pt;text-indent:0cm;">Xml<span style="font-family:宋体;">文件必须有个跟标记，所有标记必须封装在跟标记中，</span>xml<span style="font-family:宋体;">文件的标记必须形成树的结构。</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p><img src ="http://www.cppblog.com/MyCBlog/aggbug/172501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-23 22:29 <a href="http://www.cppblog.com/MyCBlog/articles/172501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml声明</title><link>http://www.cppblog.com/MyCBlog/articles/172498.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Mon, 23 Apr 2012 14:11:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/172498.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/172498.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/172498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/172498.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/172498.html</trackback:ping><description><![CDATA[<p style="margin-left:21.0pt;text-indent:-21.0pt;">1.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Xml<span style="font-family:宋体;">声明中的版本属性</span>&lt;?xml version=&#8221;1.0&#8221; ?&gt;</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">2.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>xml<span style="font-family:宋体;">声明中的编码属性</span>&lt;?xml version=&#8221;1.0&#8221; encoding=&#8221;UTF-8&#8221; ?&gt;</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">3.<span style="font-family: 'Times New Roman'; font-size: 7pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>xml<span style="font-family:宋体;">声明中的独立属性</span>&lt;?xml version=&#8221;1.0&#8221; encoding=&#8221;UTF-8&#8221; standalone=&#8221;yes&#8221; ?&gt;</p><img src ="http://www.cppblog.com/MyCBlog/aggbug/172498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-23 22:11 <a href="http://www.cppblog.com/MyCBlog/articles/172498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Event 介绍</title><link>http://www.cppblog.com/MyCBlog/articles/170522.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Sun, 08 Apr 2012 16:36:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/170522.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/170522.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/170522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/170522.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/170522.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">***********************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;filename:&nbsp;&nbsp;&nbsp;CEGUIEvent.h<br />&nbsp;&nbsp;&nbsp;&nbsp;created:&nbsp;&nbsp;&nbsp;&nbsp;Tue&nbsp;Feb&nbsp;28&nbsp;2006<br />&nbsp;&nbsp;&nbsp;&nbsp;author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Paul&nbsp;D&nbsp;Turner&nbsp;&lt;paul@cegui.org.uk&gt;<br />************************************************************************</span><span style="color: #008000; ">*/</span><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">**************************************************************************<br />&nbsp;*&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;2004&nbsp;-&nbsp;2006&nbsp;Paul&nbsp;D&nbsp;Turner&nbsp;&amp;&nbsp;The&nbsp;CEGUI&nbsp;Development&nbsp;Team<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;Permission&nbsp;is&nbsp;hereby&nbsp;granted,&nbsp;free&nbsp;of&nbsp;charge,&nbsp;to&nbsp;any&nbsp;person&nbsp;obtaining<br />&nbsp;*&nbsp;&nbsp;&nbsp;a&nbsp;copy&nbsp;of&nbsp;this&nbsp;software&nbsp;and&nbsp;associated&nbsp;documentation&nbsp;files&nbsp;(the<br />&nbsp;*&nbsp;&nbsp;&nbsp;"Software"),&nbsp;to&nbsp;deal&nbsp;in&nbsp;the&nbsp;Software&nbsp;without&nbsp;restriction,&nbsp;including<br />&nbsp;*&nbsp;&nbsp;&nbsp;without&nbsp;limitation&nbsp;the&nbsp;rights&nbsp;to&nbsp;use,&nbsp;copy,&nbsp;modify,&nbsp;merge,&nbsp;publish,<br />&nbsp;*&nbsp;&nbsp;&nbsp;distribute,&nbsp;sublicense,&nbsp;and/or&nbsp;sell&nbsp;copies&nbsp;of&nbsp;the&nbsp;Software,&nbsp;and&nbsp;to<br />&nbsp;*&nbsp;&nbsp;&nbsp;permit&nbsp;persons&nbsp;to&nbsp;whom&nbsp;the&nbsp;Software&nbsp;is&nbsp;furnished&nbsp;to&nbsp;do&nbsp;so,&nbsp;subject&nbsp;to<br />&nbsp;*&nbsp;&nbsp;&nbsp;the&nbsp;following&nbsp;conditions:<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;The&nbsp;above&nbsp;copyright&nbsp;notice&nbsp;and&nbsp;this&nbsp;permission&nbsp;notice&nbsp;shall&nbsp;be<br />&nbsp;*&nbsp;&nbsp;&nbsp;included&nbsp;in&nbsp;all&nbsp;copies&nbsp;or&nbsp;substantial&nbsp;portions&nbsp;of&nbsp;the&nbsp;Software.<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;THE&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;"AS&nbsp;IS",&nbsp;WITHOUT&nbsp;WARRANTY&nbsp;OF&nbsp;ANY&nbsp;KIND,<br />&nbsp;*&nbsp;&nbsp;&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED,&nbsp;INCLUDING&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO&nbsp;THE&nbsp;WARRANTIES&nbsp;OF<br />&nbsp;*&nbsp;&nbsp;&nbsp;MERCHANTABILITY,&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE&nbsp;AND&nbsp;NONINFRINGEMENT.<br />&nbsp;*&nbsp;&nbsp;&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;AUTHORS&nbsp;BE&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;CLAIM,&nbsp;DAMAGES&nbsp;OR<br />&nbsp;*&nbsp;&nbsp;&nbsp;OTHER&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN&nbsp;AN&nbsp;ACTION&nbsp;OF&nbsp;CONTRACT,&nbsp;TORT&nbsp;OR&nbsp;OTHERWISE,<br />&nbsp;*&nbsp;&nbsp;&nbsp;ARISING&nbsp;FROM,&nbsp;OUT&nbsp;OF&nbsp;OR&nbsp;IN&nbsp;CONNECTION&nbsp;WITH&nbsp;THE&nbsp;SOFTWARE&nbsp;OR&nbsp;THE&nbsp;USE&nbsp;OR<br />&nbsp;*&nbsp;&nbsp;&nbsp;OTHER&nbsp;DEALINGS&nbsp;IN&nbsp;THE&nbsp;SOFTWARE.<br />&nbsp;**************************************************************************</span><span style="color: #008000; ">*/</span><br />#ifndef&nbsp;_CEGUIEvent_h_<br /><span style="color: #0000FF; ">#define</span>&nbsp;_CEGUIEvent_h_<br /><br />#include&nbsp;"CEGUIString.h"<br />#include&nbsp;"CEGUIBoundSlot.h"<br />#include&nbsp;"CEGUISubscriberSlot.h"<br />#include&nbsp;"CEGUIRefCounted.h"<br /><br />#include&nbsp;&lt;map&gt;<br /><br /><span style="color: #0000FF; ">#if</span>&nbsp;defined(_MSC_VER)<br />#&nbsp;&nbsp;&nbsp;&nbsp;pragma&nbsp;warning(push)<br />#&nbsp;&nbsp;&nbsp;&nbsp;pragma&nbsp;warning(disable&nbsp;:&nbsp;4251)<br /><span style="color: #0000FF; ">#endif</span><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Start&nbsp;of&nbsp;CEGUI&nbsp;namespace&nbsp;section</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">namespace</span>&nbsp;CEGUI<br />{<br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;Defines&nbsp;an&nbsp;'event'&nbsp;which&nbsp;can&nbsp;be&nbsp;subscribed&nbsp;to&nbsp;by&nbsp;interested&nbsp;parties.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;Event&nbsp;can&nbsp;be&nbsp;subscribed&nbsp;by&nbsp;a&nbsp;function,&nbsp;a&nbsp;member&nbsp;function,&nbsp;or&nbsp;a&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;object.&nbsp;&nbsp;Whichever&nbsp;option&nbsp;is&nbsp;taken,&nbsp;the&nbsp;function&nbsp;signature&nbsp;needs&nbsp;to&nbsp;be&nbsp;as<br />&nbsp;&nbsp;&nbsp;&nbsp;follows:<br />&nbsp;&nbsp;&nbsp;&nbsp;\par<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;em&gt;bool&nbsp;function_name(const&nbsp;EventArgs&amp;&nbsp;args);&lt;/em&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;\note<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;Event&nbsp;object&nbsp;may&nbsp;not&nbsp;be&nbsp;copied.<br /></span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">class</span>&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">CEGUIEXPORT</span><span style="color: #008000; ">*/</span>&nbsp;Event<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;object.&nbsp;&nbsp;This&nbsp;is&nbsp;a&nbsp;thin&nbsp;'smart&nbsp;pointer'&nbsp;wrapper&nbsp;around&nbsp;the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actual&nbsp;BoundSlot&nbsp;that&nbsp;represents&nbsp;the&nbsp;connection.&nbsp;&nbsp;You&nbsp;can&nbsp;use&nbsp;this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;to&nbsp;inspect&nbsp;the&nbsp;current&nbsp;connection&nbsp;state&nbsp;and&nbsp;also&nbsp;to&nbsp;disconnect<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;the&nbsp;event.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;RefCounted&lt;BoundSlot&gt;&nbsp;Connection;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subscriber&nbsp;object&nbsp;type.&nbsp;&nbsp;This&nbsp;is&nbsp;now&nbsp;just&nbsp;a&nbsp;typedef&nbsp;to&nbsp;SubscriberSlot,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;use&nbsp;of&nbsp;the&nbsp;name&nbsp;Event::Subscriber&nbsp;is&nbsp;maintained&nbsp;for&nbsp;hostorical&nbsp;and<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compatability&nbsp;reasons.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;CEGUI::SubscriberSlot&nbsp;Subscriber;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;for&nbsp;a&nbsp;subscriber&nbsp;group.&nbsp;&nbsp;You&nbsp;can&nbsp;use&nbsp;the&nbsp;subscriber&nbsp;group&nbsp;to<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order&nbsp;calls&nbsp;to&nbsp;multiple&nbsp;subscribers.&nbsp;&nbsp;Groups&nbsp;are&nbsp;called&nbsp;in&nbsp;ascending<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order,&nbsp;with&nbsp;subscribers&nbsp;with&nbsp;no&nbsp;group&nbsp;called&nbsp;last.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Group;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event::Connection&nbsp;wrapper&nbsp;that&nbsp;automatically&nbsp;disconnects&nbsp;the&nbsp;connection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;the&nbsp;object&nbsp;is&nbsp;deleted&nbsp;(or&nbsp;goes&nbsp;out&nbsp;of&nbsp;scope).<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ScopedConnection&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Connection<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScopedConnection()&nbsp;{}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~ScopedConnection()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;disconnect();&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScopedConnection(<span style="color: #0000FF; ">const</span>&nbsp;Event::Connection&amp;&nbsp;connection)&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_connection(connection)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScopedConnection&amp;&nbsp;<span style="color: #0000FF; ">operator</span>=(<span style="color: #0000FF; ">const</span>&nbsp;Event::Connection&amp;&nbsp;connection)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_connection&nbsp;=&nbsp;connection;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;*<span style="color: #0000FF; ">this</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;connected()&nbsp;<span style="color: #0000FF; ">const</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d_connection.isValid()&nbsp;?&nbsp;d_connection-&gt;connected()&nbsp;:&nbsp;<span style="color: #0000FF; ">false</span>;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;disconnect()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(d_connection.isValid())&nbsp;d_connection-&gt;disconnect();&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event::Connection&nbsp;d_connection;<br />&nbsp;&nbsp;&nbsp;&nbsp;};<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs&nbsp;a&nbsp;new&nbsp;Event&nbsp;object&nbsp;with&nbsp;the&nbsp;specified&nbsp;name<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;Event(<span style="color: #0000FF; ">const</span>&nbsp;String&amp;&nbsp;name);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Destructor&nbsp;for&nbsp;Event&nbsp;objects.&nbsp;&nbsp;Note&nbsp;that&nbsp;this&nbsp;is&nbsp;non-virtual&nbsp;and&nbsp;so&nbsp;you<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;should&nbsp;not&nbsp;sub-class&nbsp;Event.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;~Event();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;the&nbsp;name&nbsp;given&nbsp;to&nbsp;this&nbsp;Event&nbsp;object&nbsp;when&nbsp;it&nbsp;was&nbsp;created.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\return<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;object&nbsp;containing&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;Event&nbsp;object.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;String&amp;&nbsp;getName(<span style="color: #0000FF; ">void</span>)&nbsp;<span style="color: #0000FF; ">const</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d_name;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subscribes&nbsp;some&nbsp;function&nbsp;or&nbsp;object&nbsp;to&nbsp;the&nbsp;Event<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\param&nbsp;subscriber<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;function,&nbsp;static&nbsp;member&nbsp;function,&nbsp;or&nbsp;function&nbsp;object,&nbsp;with&nbsp;the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signature&nbsp;void&nbsp;function_name(const&nbsp;EventArgs&amp;&nbsp;args).&nbsp;&nbsp;To&nbsp;subscribe&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;member&nbsp;function&nbsp;you&nbsp;should&nbsp;explicitly&nbsp;create&nbsp;an&nbsp;Event::Subscriber&nbsp;as<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;parameter.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\return<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;Connection&nbsp;object&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;disconnect&nbsp;(unsubscribe)&nbsp;from<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;Event,&nbsp;and&nbsp;also&nbsp;to&nbsp;check&nbsp;the&nbsp;connection&nbsp;state.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;subscribe(<span style="color: #0000FF; ">const</span>&nbsp;Subscriber&amp;&nbsp;slot);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subscribes&nbsp;some&nbsp;function&nbsp;or&nbsp;object&nbsp;to&nbsp;the&nbsp;Event<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\param&nbsp;group<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;Event&nbsp;group&nbsp;to&nbsp;subscribe&nbsp;to,&nbsp;subscription&nbsp;groups&nbsp;are&nbsp;called&nbsp;in<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ascending&nbsp;order,&nbsp;followed&nbsp;by&nbsp;subscriptions&nbsp;with&nbsp;no&nbsp;group.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;that&nbsp;calling&nbsp;order&nbsp;of&nbsp;connections&nbsp;to&nbsp;the&nbsp;same&nbsp;group&nbsp;is&nbsp;unspecified.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\param&nbsp;subscriber<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;function,&nbsp;static&nbsp;member&nbsp;function,&nbsp;or&nbsp;function&nbsp;object,&nbsp;with&nbsp;the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signature&nbsp;void&nbsp;function_name(const&nbsp;EventArgs&amp;&nbsp;args).&nbsp;&nbsp;To&nbsp;subscribe&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;member&nbsp;function&nbsp;you&nbsp;should&nbsp;explicitly&nbsp;create&nbsp;an&nbsp;Event::Subscriber&nbsp;as<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;parameter.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\return<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;Connection&nbsp;object&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;disconnect&nbsp;(unsubscribe)&nbsp;from<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;Event,&nbsp;and&nbsp;also&nbsp;to&nbsp;check&nbsp;the&nbsp;connection&nbsp;state.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;subscribe(Group&nbsp;group,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;Subscriber&amp;&nbsp;slot);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fires&nbsp;the&nbsp;event.&nbsp;&nbsp;All&nbsp;event&nbsp;subscribers&nbsp;get&nbsp;called&nbsp;in&nbsp;the&nbsp;appropriate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sequence.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\param&nbsp;args<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;object&nbsp;derived&nbsp;from&nbsp;EventArgs&nbsp;to&nbsp;be&nbsp;passed&nbsp;to&nbsp;each&nbsp;event&nbsp;subscriber.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;'handled'&nbsp;field&nbsp;will&nbsp;be&nbsp;set&nbsp;to&nbsp;true&nbsp;if&nbsp;any&nbsp;of&nbsp;the&nbsp;called&nbsp;subscribers<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;that&nbsp;they&nbsp;handled&nbsp;the&nbsp;event.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\return<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nothing.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;<span style="color: #0000FF; ">operator</span>()(EventArgs&amp;&nbsp;args);<br /><br /><br /><span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;CEGUI::BoundSlot::disconnect();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Disconnects&nbsp;and&nbsp;removes&nbsp;the&nbsp;given&nbsp;BoundSlot&nbsp;from&nbsp;the&nbsp;collection&nbsp;of&nbsp;bound<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slots&nbsp;attached&nbsp;to&nbsp;this&nbsp;Event,&nbsp;thus&nbsp;'unsubscribing'&nbsp;it.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;\note<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;is&nbsp;an&nbsp;implementation&nbsp;member,&nbsp;and&nbsp;is&nbsp;not&nbsp;available&nbsp;to&nbsp;client&nbsp;code.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;order&nbsp;to&nbsp;detach&nbsp;/&nbsp;unsubscribe&nbsp;from&nbsp;an&nbsp;Event&nbsp;you&nbsp;should&nbsp;be&nbsp;using&nbsp;the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;object(s)&nbsp;returned&nbsp;when&nbsp;you&nbsp;initially&nbsp;subscribed.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;unsubscribe(<span style="color: #0000FF; ">const</span>&nbsp;BoundSlot&amp;&nbsp;slot);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Copy&nbsp;constructor&nbsp;and&nbsp;assignment&nbsp;are&nbsp;not&nbsp;allowed&nbsp;for&nbsp;events</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;Event(<span style="color: #0000FF; ">const</span>&nbsp;Event&amp;)&nbsp;{}<br />&nbsp;&nbsp;&nbsp;&nbsp;Event&amp;&nbsp;<span style="color: #0000FF; ">operator</span>=(<span style="color: #0000FF; ">const</span>&nbsp;Event&amp;)&nbsp;&nbsp;{<span style="color: #0000FF; ">return</span>&nbsp;*<span style="color: #0000FF; ">this</span>;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;std::multimap&lt;Group,&nbsp;Connection&gt;&nbsp;SlotContainer;<br />&nbsp;&nbsp;&nbsp;&nbsp;SlotContainer&nbsp;d_slots;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">!&lt;&nbsp;Collection&nbsp;holding&nbsp;ref-counted&nbsp;bound&nbsp;slots</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;String&nbsp;d_name;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">!&lt;&nbsp;Name&nbsp;of&nbsp;this&nbsp;event</span><span style="color: #008000; "><br /></span>};<br /><br />}&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;End&nbsp;of&nbsp;&nbsp;CEGUI&nbsp;namespace&nbsp;section</span><span style="color: #008000; "><br /></span><br /><span style="color: #0000FF; ">#if</span>&nbsp;defined(_MSC_VER)<br />#&nbsp;&nbsp;&nbsp;&nbsp;pragma&nbsp;warning(pop)<br /><span style="color: #0000FF; ">#endif</span><br /><br /><span style="color: #0000FF; ">#endif</span>&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;end&nbsp;of&nbsp;guard&nbsp;_CEGUIEvent_h_</span></div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->subscribe函数是给&nbsp;这个事件注册一个处理函数，<span style="color: #0000FF; ">operator</span>（）当这个时间被激发后会被调用，这个函数是便利所有的处理类，并且调用该类的处理函数。unsubscribe函数取消一个处理类和这个事件的关联，BoundSlot的disconnect函数会调用她<br />Event::Connection&nbsp;Event::subscribe(Event::Group&nbsp;group,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;Event::Subscriber&amp;&nbsp;slot)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Event::Connection&nbsp;c(<span style="color: #0000FF; ">new</span>&nbsp;BoundSlot(group,&nbsp;slot,&nbsp;*<span style="color: #0000FF; ">this</span>));<br />&nbsp;&nbsp;&nbsp;&nbsp;d_slots.insert(std::pair&lt;Group,&nbsp;Connection&gt;(group,&nbsp;c));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;c;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;Event::<span style="color: #0000FF; ">operator</span>()(EventArgs&amp;&nbsp;args)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SlotContainer::iterator&nbsp;iter(d_slots.begin());<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;SlotContainer::const_iterator&nbsp;end_iter(d_slots.end());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;execute&nbsp;all&nbsp;subscribers,&nbsp;updating&nbsp;the&nbsp;'handled'&nbsp;state&nbsp;as&nbsp;we&nbsp;go</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(;&nbsp;iter&nbsp;!=&nbsp;end_iter;&nbsp;++iter)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((*iter-&gt;second-&gt;d_subscriber)(args))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++args.handled;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;Event::unsubscribe(<span style="color: #0000FF; ">const</span>&nbsp;BoundSlot&amp;&nbsp;slot)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;try&nbsp;to&nbsp;find&nbsp;the&nbsp;slot&nbsp;in&nbsp;our&nbsp;collection</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;SlotContainer::iterator&nbsp;curr&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::find_if(d_slots.begin(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_slots.end(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SubComp(slot));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;erase&nbsp;our&nbsp;reference&nbsp;to&nbsp;the&nbsp;slot,&nbsp;if&nbsp;we&nbsp;had&nbsp;one.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(curr&nbsp;!=&nbsp;d_slots.end())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_slots.erase(curr);<br />}</div><img src ="http://www.cppblog.com/MyCBlog/aggbug/170522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-09 00:36 <a href="http://www.cppblog.com/MyCBlog/articles/170522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RefCounted类的介绍</title><link>http://www.cppblog.com/MyCBlog/articles/170521.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Sun, 08 Apr 2012 16:20:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/170521.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/170521.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/170521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/170521.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/170521.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">***********************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;filename:&nbsp;&nbsp;&nbsp;CEGUIRefCounted.h<br />&nbsp;&nbsp;&nbsp;&nbsp;created:&nbsp;&nbsp;&nbsp;&nbsp;Wed&nbsp;Mar&nbsp;1&nbsp;2006<br />&nbsp;&nbsp;&nbsp;&nbsp;author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Paul&nbsp;D&nbsp;Turner&nbsp;&lt;paul@cegui.org.uk&gt;<br />************************************************************************</span><span style="color: #008000; ">*/</span><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">**************************************************************************<br />&nbsp;*&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;2004&nbsp;-&nbsp;2006&nbsp;Paul&nbsp;D&nbsp;Turner&nbsp;&amp;&nbsp;The&nbsp;CEGUI&nbsp;Development&nbsp;Team<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;Permission&nbsp;is&nbsp;hereby&nbsp;granted,&nbsp;free&nbsp;of&nbsp;charge,&nbsp;to&nbsp;any&nbsp;person&nbsp;obtaining<br />&nbsp;*&nbsp;&nbsp;&nbsp;a&nbsp;copy&nbsp;of&nbsp;this&nbsp;software&nbsp;and&nbsp;associated&nbsp;documentation&nbsp;files&nbsp;(the<br />&nbsp;*&nbsp;&nbsp;&nbsp;"Software"),&nbsp;to&nbsp;deal&nbsp;in&nbsp;the&nbsp;Software&nbsp;without&nbsp;restriction,&nbsp;including<br />&nbsp;*&nbsp;&nbsp;&nbsp;without&nbsp;limitation&nbsp;the&nbsp;rights&nbsp;to&nbsp;use,&nbsp;copy,&nbsp;modify,&nbsp;merge,&nbsp;publish,<br />&nbsp;*&nbsp;&nbsp;&nbsp;distribute,&nbsp;sublicense,&nbsp;and/or&nbsp;sell&nbsp;copies&nbsp;of&nbsp;the&nbsp;Software,&nbsp;and&nbsp;to<br />&nbsp;*&nbsp;&nbsp;&nbsp;permit&nbsp;persons&nbsp;to&nbsp;whom&nbsp;the&nbsp;Software&nbsp;is&nbsp;furnished&nbsp;to&nbsp;do&nbsp;so,&nbsp;subject&nbsp;to<br />&nbsp;*&nbsp;&nbsp;&nbsp;the&nbsp;following&nbsp;conditions:<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;The&nbsp;above&nbsp;copyright&nbsp;notice&nbsp;and&nbsp;this&nbsp;permission&nbsp;notice&nbsp;shall&nbsp;be<br />&nbsp;*&nbsp;&nbsp;&nbsp;included&nbsp;in&nbsp;all&nbsp;copies&nbsp;or&nbsp;substantial&nbsp;portions&nbsp;of&nbsp;the&nbsp;Software.<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;THE&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;"AS&nbsp;IS",&nbsp;WITHOUT&nbsp;WARRANTY&nbsp;OF&nbsp;ANY&nbsp;KIND,<br />&nbsp;*&nbsp;&nbsp;&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED,&nbsp;INCLUDING&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO&nbsp;THE&nbsp;WARRANTIES&nbsp;OF<br />&nbsp;*&nbsp;&nbsp;&nbsp;MERCHANTABILITY,&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE&nbsp;AND&nbsp;NONINFRINGEMENT.<br />&nbsp;*&nbsp;&nbsp;&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;AUTHORS&nbsp;BE&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;CLAIM,&nbsp;DAMAGES&nbsp;OR<br />&nbsp;*&nbsp;&nbsp;&nbsp;OTHER&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN&nbsp;AN&nbsp;ACTION&nbsp;OF&nbsp;CONTRACT,&nbsp;TORT&nbsp;OR&nbsp;OTHERWISE,<br />&nbsp;*&nbsp;&nbsp;&nbsp;ARISING&nbsp;FROM,&nbsp;OUT&nbsp;OF&nbsp;OR&nbsp;IN&nbsp;CONNECTION&nbsp;WITH&nbsp;THE&nbsp;SOFTWARE&nbsp;OR&nbsp;THE&nbsp;USE&nbsp;OR<br />&nbsp;*&nbsp;&nbsp;&nbsp;OTHER&nbsp;DEALINGS&nbsp;IN&nbsp;THE&nbsp;SOFTWARE.<br />&nbsp;**************************************************************************</span><span style="color: #008000; ">*/</span><br />#ifndef&nbsp;_CEGUIRefCounted_h_<br /><span style="color: #0000FF; ">#define</span>&nbsp;_CEGUIRefCounted_h_<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Start&nbsp;of&nbsp;CEGUI&nbsp;namespace&nbsp;section</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">namespace</span>&nbsp;CEGUI<br />{<br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;Simple,&nbsp;generic,&nbsp;reference&nbsp;counted&nbsp;pointer&nbsp;class.&nbsp;&nbsp;This&nbsp;is&nbsp;primarily&nbsp;here<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;use&nbsp;by&nbsp;the&nbsp;Events&nbsp;system&nbsp;to&nbsp;track&nbsp;when&nbsp;to&nbsp;delete&nbsp;slot&nbsp;bindings.<br /></span><span style="color: #008000; ">*/</span><br />template&lt;typename&nbsp;T&gt;<br /><span style="color: #0000FF; ">class</span>&nbsp;RefCounted<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default&nbsp;constructor.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;RefCounted()&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_object(0),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_count(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Contruct&nbsp;a&nbsp;RefCounted&nbsp;object&nbsp;that&nbsp;wraps&nbsp;the&nbsp;pointer&nbsp;\a&nbsp;ob.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;RefCounted(T*&nbsp;ob)&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_object(ob),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_count((ob&nbsp;!=&nbsp;0)&nbsp;?&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>(1)&nbsp;:&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copy&nbsp;constructor<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;RefCounted(<span style="color: #0000FF; ">const</span>&nbsp;RefCounted&lt;T&gt;&amp;&nbsp;other)&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_object(other.d_object),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_count(other.d_count)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(d_count)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addRef();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Destructor.&nbsp;&nbsp;Only&nbsp;deletes&nbsp;the&nbsp;associated&nbsp;object&nbsp;if&nbsp;no&nbsp;further&nbsp;references<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exist.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;~RefCounted()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(d_object)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;release();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assignment&nbsp;operator.&nbsp;&nbsp;Previously&nbsp;held&nbsp;object&nbsp;gets&nbsp;its&nbsp;reference&nbsp;count<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reduced,&nbsp;and&nbsp;is&nbsp;deleted&nbsp;if&nbsp;no&nbsp;further&nbsp;references&nbsp;exist.&nbsp;&nbsp;The&nbsp;newly<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assigned&nbsp;object,&nbsp;taken&nbsp;from&nbsp;\a&nbsp;other,&nbsp;gets&nbsp;its&nbsp;count&nbsp;increased.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;RefCounted&lt;T&gt;&amp;&nbsp;<span style="color: #0000FF; ">operator</span>=(<span style="color: #0000FF; ">const</span>&nbsp;RefCounted&lt;T&gt;&amp;&nbsp;other)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*<span style="color: #0000FF; ">this</span>&nbsp;!=&nbsp;other)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(d_object)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;release();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_object&nbsp;=&nbsp;other.d_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_count&nbsp;=&nbsp;d_object&nbsp;?&nbsp;other.d_count&nbsp;:&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(d_count)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addRef();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;*<span style="color: #0000FF; ">this</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;whether&nbsp;the&nbsp;two&nbsp;RefCounted&nbsp;ptrs&nbsp;are&nbsp;equal<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(point&nbsp;to&nbsp;the&nbsp;same&nbsp;object)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">operator</span>==(<span style="color: #0000FF; ">const</span>&nbsp;RefCounted&lt;T&gt;&amp;&nbsp;other)&nbsp;<span style="color: #0000FF; ">const</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d_object&nbsp;==&nbsp;other.d_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;whether&nbsp;the&nbsp;two&nbsp;RefCounted&nbsp;ptrs&nbsp;are&nbsp;not&nbsp;equal<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(point&nbsp;to&nbsp;different&nbsp;objects)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">operator</span>!=(<span style="color: #0000FF; ">const</span>&nbsp;RefCounted&lt;T&gt;&amp;&nbsp;other)&nbsp;<span style="color: #0000FF; ">const</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d_object&nbsp;!=&nbsp;other.d_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;the&nbsp;object&nbsp;referred&nbsp;to&nbsp;by&nbsp;the&nbsp;wrapped&nbsp;pointer.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(beware&nbsp;of&nbsp;null&nbsp;pointers&nbsp;when&nbsp;using&nbsp;this!)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;T&amp;&nbsp;<span style="color: #0000FF; ">operator</span>*()&nbsp;<span style="color: #0000FF; ">const</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;*d_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;T&amp;&nbsp;<span style="color: #0000FF; ">operator</span>*()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;*d_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;the&nbsp;wrapped&nbsp;pointer.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;T*&nbsp;<span style="color: #0000FF; ">operator</span>-&gt;()&nbsp;<span style="color: #0000FF; ">const</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;T*&nbsp;<span style="color: #0000FF; ">operator</span>-&gt;()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;whether&nbsp;the&nbsp;wrapped&nbsp;pointer&nbsp;is&nbsp;valid.&nbsp;&nbsp;i.e.&nbsp;that&nbsp;it&nbsp;is&nbsp;not&nbsp;null.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;isValid()&nbsp;<span style="color: #0000FF; ">const</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d_object&nbsp;!=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;display()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;*<span style="color: #0000FF; ">this</span>-&gt;d_count&lt;&lt;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Increases&nbsp;the&nbsp;reference&nbsp;count&nbsp;for&nbsp;the&nbsp;wrapped&nbsp;object.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addRef()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++*d_count;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">!<br />&nbsp;&nbsp;&nbsp;&nbsp;\brief<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Decreases&nbsp;the&nbsp;reference&nbsp;count&nbsp;for&nbsp;the&nbsp;wrapped&nbsp;object,&nbsp;and&nbsp;if&nbsp;the&nbsp;count<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has&nbsp;reached&nbsp;zero,&nbsp;the&nbsp;object&nbsp;and&nbsp;the&nbsp;shared&nbsp;counter&nbsp;are&nbsp;deleted.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;release()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!--*d_count)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;d_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;d_count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_object&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d_count&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;T*&nbsp;d_object;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">!&nbsp;pointer&nbsp;to&nbsp;the&nbsp;object.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>*&nbsp;d_count;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">!&nbsp;pointer&nbsp;to&nbsp;the&nbsp;shared&nbsp;counter&nbsp;object.</span><span style="color: #008000; "><br /></span>};<br /><br />}&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;End&nbsp;of&nbsp;&nbsp;CEGUI&nbsp;namespace&nbsp;section</span><span style="color: #008000; "><br /></span><br /><span style="color: #0000FF; ">#endif</span>&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;end&nbsp;of&nbsp;guard&nbsp;_CEGUIRefCounted_h_</span></div><br />这个类RefCounted是一个引用的封装模板类，原意可能是一个处理函数可以被多个事件引用，但在Event的实现代码里直接调用了BoundSlot的cleanup函数，而不是RefCounted的release函数来清理。可见，并没有实现一个事件处理函数被多个事件引用，其实也没有必要。<img src ="http://www.cppblog.com/MyCBlog/aggbug/170521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-09 00:20 <a href="http://www.cppblog.com/MyCBlog/articles/170521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字体</title><link>http://www.cppblog.com/MyCBlog/articles/169963.html</link><dc:creator>加文</dc:creator><author>加文</author><pubDate>Tue, 03 Apr 2012 14:04:00 GMT</pubDate><guid>http://www.cppblog.com/MyCBlog/articles/169963.html</guid><wfw:comment>http://www.cppblog.com/MyCBlog/comments/169963.html</wfw:comment><comments>http://www.cppblog.com/MyCBlog/articles/169963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/MyCBlog/comments/commentRss/169963.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/MyCBlog/services/trackbacks/169963.html</trackback:ping><description><![CDATA[<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在cegui里文本都是图像，文字的显示，就是由这些图像拼成的。文本的显示也是字体控制的，字体还计算文本的渲染长度，宽度等。同一种字体渲染同样的文本渲染尺寸是一致的。字体还需要支持通过鼠标位置获取文本的位置。这个特性被用在鼠标点击后设置光标的位置。这里说的字体，指的是cegui的字体类，而不是真正的字体文件。cegui里面有两种字体，一种是点阵字体，大小固定不变；另外一种是Truetype类型的字体，对应windows系统的提供的TTF字体文件，这种字体是矢量字体。</div><img src ="http://www.cppblog.com/MyCBlog/aggbug/169963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/MyCBlog/" target="_blank">加文</a> 2012-04-03 22:04 <a href="http://www.cppblog.com/MyCBlog/articles/169963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>