﻿<?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>IT博客-_skyfly-随笔分类-代码片段</title><link>http://www.cnitblog.com/_skyfly/category/3178.html</link><description>我不要在IT中迷失方向</description><language>zh-cn</language><lastBuildDate>Thu, 29 Sep 2011 09:12:07 GMT</lastBuildDate><pubDate>Thu, 29 Sep 2011 09:12:07 GMT</pubDate><ttl>60</ttl><item><title>[C++/property模板类]使用时两个报错的解决办法</title><link>http://www.cnitblog.com/_skyfly/archive/2007/01/25/22307.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 25 Jan 2007 07:54:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2007/01/25/22307.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/22307.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2007/01/25/22307.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/22307.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/22307.html</trackback:ping><description><![CDATA[今天在项目中使用了C++的proper模板类，这个模板类是用来完成其它支持属性的语言关键字“属性”类似作用的。<br /><br />在我的代码库内收藏了Achilleas Margaritis编写的C++ object properties library。很吸引人而且实用的功能。可惜在我的VS2005中使用时发生了以下两个错误，错误经定位后均出现在property.hpp中：<br />1、   出错代码： <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"><span style="COLOR: #000000">typedef _property1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">C, T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::_property2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A, S</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> base_class;</span></div>         错误提示：<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"><span style="COLOR: #000000">warning C4346: “cpp::properties::_property1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">C,T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::_property2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A,S</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">”: 依赖名称不是类型，用“typename”为前缀来表示类型；</span></div><br />2、   出错代码： 
<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"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> {};</span></div>         错误提示：<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"><span style="COLOR: #000000">error C2332: “</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">”: 缺少标记名；</span></div><br />*********************************************************<br />问题1很快查到原因：<br />*********************************************************<br /><font color="#0000ff" size="2">作者：Scott Meyers<br />译者：fatalerror99 (iTePub's Nirvana)<br /><br />nested dependent name（嵌套依赖名字）会导致解析困难。例如，假设我们更加愚蠢地<br />以这种方法开始 print2nd：<br /><br />template&lt;typename C&gt;<br />void print2nd(const C&amp; container)<br />{<br />  <font color="#ff0000">C::const_iterator * x;<br /></font>  ...<br />}<br /><br /><font color="#0000ff">这看上去好像是我们将 x 声明为一个指向 C::const_iterator 的 local variable（局<br />部变量）。但是它看上去如此仅仅是因为我们知道 C::const_iterator 是一个 type（<br />类型）。<font color="#ff0000">但是如果 C::const_iterator 不是一个 type（类型）呢？如果 C 有一个 st<br />atic data member（静态数据成员）碰巧就叫做 const_iterator 呢？再如果 x 碰巧是<br />一个 global variable（全局变量）的名字呢？在这种情况下，上面的代码就不是声明<br />一个 local variable（局部变量），而是成为 C::const_iterator 乘以 x</font>！当然，这<br />听起来有些愚蠢，但它是可能的，而编写 C++ 解析器的人必须考虑所有可能的输入，甚<br />至是愚蠢的。<br /></font><br />直到 C 成为已知之前，没有任何办法知道 C::const_iterator 到底是不是一个 type（<br />类型），而当 template（模板）print2nd 被解析的时候，C 还不是已知的。C++ 有一<br />条规则解决这个歧义：如果解析器在一个 template（模板）中遇到一个 nested depen<br />dent name（嵌套依赖名字），它假定那个名字不是一个 type（类型），除非你用其它<br />方式告诉它。缺省情况下，nested dependent name（嵌套依赖名字）不是 types（类型<br />）。（对于这条规则有一个例外，我待会儿告诉你。）<br /></font><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"><span style="COLOR: #000000">typedef<font color="#ff0000"> typename</font><font color="#ff0000"> </font>_property1</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">C, T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::_property2</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A, S</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> base_class;</span></div>问题解决(只能说在Windows平台下VS自带的C++编译器问题解决，其它编译器甚至其它平台上的编译器我可没有去试过)。<br /><br />*********************************************************<br />问题2我没查到原因，因为我直接按控制台项目创建示例代码时没出现这样的错误，而在Win32项目创建项目示例代码时就出现这样的报错。因为我大胆猜测，应当VS2005其自带的C++编译器为了支持C++/CLI，将interface列为关键字的缘故。因此编译器认为class interface是两个关键字的罗列，所以才会报“缺少标记名”。所以我的做法如下：<br />*********************************************************<br /><br />把property.hpp(就是那个实现property模板类的文件)中所有涉及“interface”的地方完全替换为“_interface”，同时为保持风格统一，将property模板类中所有作用相同的类全修改为下划线开头！(_variable/_read_write/_read_only/_write_only)，问题搞定！<br /><br />不知道Achilleas Margaritis看到了我的解决方案是不是哭笑不得，哈哈～～<img src ="http://www.cnitblog.com/_skyfly/aggbug/22307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2007-01-25 15:54 <a href="http://www.cnitblog.com/_skyfly/archive/2007/01/25/22307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WTL 8.0的程序生成向导调整后方可使用</title><link>http://www.cnitblog.com/_skyfly/archive/2006/11/16/19221.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 16 Nov 2006 07:03:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/11/16/19221.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/19221.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/11/16/19221.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/19221.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/19221.html</trackback:ping><description><![CDATA[<p>从我开始安装了VS2005以后，我的WTL8.0的程序生成向导就一直不能使用。最近几次开发程序我一直都是在以前开发代码的基础上进行变动。这段时间计划要开发一个比较大的系统，我终于无法忍受这种拷贝粘贴再改动的状况，彻底研读分析程序生成向导的脚本。<br><br>还好，终于给我找到了问题的症结。原来错误不止一处：<br><br>1、WTL80\AppWiz\Files\HTML\1033的目录下的三个文件都存在同一处问题，导致向导无法执行：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AppType.htm的第443到451行、default.htm的第509到517行、UIFeatures.htm的第516到524行：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">SCRIPT</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">var</span> <span style="COLOR: #000000">&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;window.external.FindSymbol(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">PRODUCT_INSTALLATION_DIR</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">+=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">VCWizards/</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">+=</span> <span style="COLOR: #000000">&nbsp;window.external.GetHostLocale();<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">var</span> <span style="COLOR: #000000">&nbsp;strScriptPath&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/Script.js</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">var</span> <span style="COLOR: #000000">&nbsp;strCommonPath&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;strPath&nbsp;</span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/Common.js</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.scripts(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">INCLUDE_SCRIPT</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">).src&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;strScriptPath;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.scripts(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">INCLUDE_COMMON</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">).src&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;strCommonPath;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">SCRIPT</span> <span style="COLOR: #000000">&gt;</span> </div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要修改为：<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.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">SCRIPT</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.scripts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">INCLUDE_SCRIPT</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).src&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;window.external.FindSymbol(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SCRIPT_COMMON_PATH</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/Script.js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.scripts(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">INCLUDE_COMMON</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).src&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;window.external.FindSymbol(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SCRIPT_COMMON_PATH</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/Common.js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">SCRIPT</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因是Script.js与Common.js两个文件的路径指向错误，因此无法读取这两个文件中的所定义的函数。<br><br>2、WTL80\AppWiz\Files\HTML\1033\default.htm的第21到22行的标签未封闭，直接删掉：<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.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000">&nbsp;This&nbsp;closing&nbsp;tag&nbsp;is&nbsp;here&nbsp;only&nbsp;to&nbsp;avoid&nbsp;security&nbsp;warning&nbsp;</span><span style="COLOR: #000000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">OBJECT</span><span style="COLOR: #000000">&gt;</span></div>
<br>3、WTL80\AppWiz\Files\HTML\1033的目录下的三个文件AppType.htm、default.htm、UIFeatures.htm的排版格式有问题，导致向导页面无法正常显示，直接在VS2005中打开进行编辑，将多余的空行删掉，把窄的表格拉宽。搞定。<br><br>现在就可以正常的使用WTL的程序生成向导了，我比较奇怪的是，难道没有其它的同仁们发现这个问题的么，反正我在google和baidu上都没有查到解决方案。<br><br>我已经将这三个文件打包了，需要用的同仁可以下载覆盖一下：<br><a href="http://www.cnitblog.com/Files/_skyfly/1033.rar">WTL8.0程序生成向导修复文件</a>。 <img src ="http://www.cnitblog.com/_skyfly/aggbug/19221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-11-16 15:03 <a href="http://www.cnitblog.com/_skyfly/archive/2006/11/16/19221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>boost在路上...tokenizer [转贴]</title><link>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15046.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 10 Aug 2006 01:39:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15046.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/15046.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/15046.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/15046.html</trackback:ping><description><![CDATA[
		<div class="posttitle">(原载：<a href="http://www.cppblog.com/zuroc/">http://www.cppblog.com/zuroc/</a>)</div>
		<p>tokenizer - Break of a string or other character sequence into a series of tokens, from John Bandela<br />tokenizer - 分解字串,提取内容.作者: John Bandela</p>
		<p>例一:<br />// simple_example_1.cpp<br />#include&lt;iostream&gt;<br />#include&lt;boost/tokenizer.hpp&gt;<br />#include&lt;string&gt;</p>
		<p>int main(){<br />   using namespace std;<br />   using namespace boost;<br />   string s = "This is,  a test";<br />   tokenizer&lt;&gt; tok(s);<br />   for(tokenizer&lt;&gt;::iterator beg=tok.begin(); beg!=tok.end();++beg){<br />       cout &lt;&lt; *beg &lt;&lt; "\n";<br />   }<br />}</p>
		<p>输出<br />This<br />is<br />a<br />test</p>
		<p>tokenizer默认将单词以空格和标点为边界分开.</p>
		<p>例二:<br />#include&lt;iostream&gt;<br />#include&lt;boost/tokenizer.hpp&gt;<br />#include&lt;string&gt;</p>
		<p>int main(){<br />   using namespace std;<br />   using namespace boost;<br />   string s = "Field 1,\"putting quotes around fields, allows commas\",Field 3";<br />   tokenizer&lt;escaped_list_separator&lt;char&gt; &gt; tok(s);<br />   for(tokenizer&lt;escaped_list_separator&lt;char&gt; &gt;::iterator beg=tok.begin(); beg!=tok.end();++beg){<br />       cout &lt;&lt; *beg &lt;&lt; "\n";<br />   }<br />}<br />输出<br />Field 1<br />putting quotes around fields, allows commas<br />Field 3</p>
		<p>双引号之间可以有标点.</p>
		<p>
				<br />例三:<br />// simple_example_3.cpp<br />#include&lt;iostream&gt;<br />#include&lt;boost/tokenizer.hpp&gt;<br />#include&lt;string&gt;</p>
		<p>int main(){<br />   using namespace std;<br />   using namespace boost;<br />   string s = "12252001";<br />   int offsets[] = {2,2,4};<br />   offset_separator f(offsets, offsets+3);<br />   tokenizer&lt;offset_separator&gt; tok(s,f);<br />   for(tokenizer&lt;offset_separator&gt;::iterator beg=tok.begin(); beg!=tok.end();++beg){<br />       cout &lt;&lt; *beg &lt;&lt; "\n";<br />   }<br />}</p>
		<p>把12252001分解为<br />12<br />25<br />2001</p>
		<p>例4:<br />// char_sep_example_1.cpp<br />#include &lt;iostream&gt;<br />#include &lt;boost/tokenizer.hpp&gt;<br />#include &lt;string&gt;</p>
		<p>int main()<br />{<br />  std::string str = ";!!;Hello|world||-foo--bar;yow;baz|";<br />  typedef boost::tokenizer&lt;boost::char_separator&lt;char&gt; &gt;<br />    tokenizer;<br />  boost::char_separator&lt;char&gt; sep("-;|");<br />  tokenizer tokens(str, sep);<br />  for (tokenizer::iterator tok_iter = tokens.begin();<br />       tok_iter != tokens.end(); ++tok_iter)<br />    std::cout &lt;&lt; "&lt;" &lt;&lt; *tok_iter &lt;&lt; "&gt; ";<br />  std::cout &lt;&lt; "\n";<br />  return EXIT_SUCCESS;<br />}</p>
		<p>输出<br />&lt;!!&gt; &lt;Hello&gt; &lt;world&gt; &lt;foo&gt; &lt;bar&gt; &lt;yow&gt; &lt;baz&gt;<br />自定义分隔的标点</p>
		<p>例5:<br />    // char_sep_example_2.cpp<br />    #include &lt;iostream&gt;<br />    #include &lt;boost/tokenizer.hpp&gt;<br />    #include &lt;string&gt;</p>
		<p>    int main()<br />    {<br />        std::string str = ";;Hello|world||-foo--bar;yow;baz|";<br />        typedef boost::tokenizer&lt;boost::char_separator&lt;char&gt; &gt;<br />            tokenizer;<br />        boost::char_separator&lt;char&gt; sep("-;", "|", boost::keep_empty_tokens);<br />        tokenizer tokens(str, sep);<br />        for (tokenizer::iterator tok_iter = tokens.begin();<br />             tok_iter != tokens.end(); ++tok_iter)<br />          std::cout &lt;&lt; "&lt;" &lt;&lt; *tok_iter &lt;&lt; "&gt; ";<br />        std::cout &lt;&lt; "\n";<br />        return EXIT_SUCCESS;<br />    }</p>
		<p>The output is:</p>
		<p>    &lt;&gt; &lt;&gt; &lt;Hello&gt; &lt;|&gt; &lt;world&gt; &lt;|&gt; &lt;&gt; &lt;|&gt; &lt;&gt; &lt;foo&gt; &lt;&gt; &lt;bar&gt; &lt;yow&gt; &lt;baz&gt; &lt;|&gt; &lt;&gt;<br />去除-; , 保留|但将它看作是分隔符,当两个分隔符相邻的时候会自动加空格</p>
		<p>例6:<br />    // char_sep_example_3.cpp<br />    #include &lt;iostream&gt;<br />    #include &lt;boost/tokenizer.hpp&gt;<br />    #include &lt;string&gt;</p>
		<p>    int main()<br />    {<br />       std::string str = "This is,  a test";<br />       typedef boost::tokenizer&lt;boost::char_separator&lt;char&gt; &gt; Tok;<br />       boost::char_separator&lt;char&gt; sep; // default constructed<br />       Tok tok(str, sep);<br />       for(Tok::iterator tok_iter = tok.begin(); tok_iter != tok.end(); ++tok_iter)<br />         std::cout &lt;&lt; "&lt;" &lt;&lt; *tok_iter &lt;&lt; "&gt; ";<br />       std::cout &lt;&lt; "\n";<br />       return EXIT_SUCCESS;<br />    }</p>
		<p>The output is:</p>
		<p>    &lt;This&gt; &lt;is&gt; &lt;,&gt; &lt;a&gt; &lt;test&gt;<br />保留标点但将它看作分隔符<br /></p>
<img src ="http://www.cnitblog.com/_skyfly/aggbug/15046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-08-10 09:39 <a href="http://www.cnitblog.com/_skyfly/archive/2006/08/10/15046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Boost:UTF-8 Codecvt Facet(unicode 和 utf-8 之间相互转码) [转贴]</title><link>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15044.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 10 Aug 2006 01:38:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15044.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/15044.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/08/10/15044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/15044.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/15044.html</trackback:ping><description><![CDATA[
		<div class="seperator">(原载：<a href="http://www.cppblog.com/zuroc/"><font color="#009933">http://www.cppblog.com/zuroc/</font></a>)<br /><br />看到有前辈写了一个<a id="viewpost1_TitleUrl" href="http://www.cppblog.com/kb/archive/2005/09/29/491.html"><font color="#003366">UTF-8与UNICODE相互转换的代码</font></a>,<font color="#003366"><font color="#000000">顺便提一下,希望可以给大家提供一点帮助.<br /></font><font color="#000000">下面是一些编码格式的bit长</font><br /></font></div>
		<p>Examples of fixed-width encoding forms:</p>
		<p>
		</p>
		<table class="gray">
				<tbody>
						<tr>
								<th class="grayfirst">Type</th>
								<th class="grayfirst">Each character<br />encoded as</th>
								<th class="grayfirst">Notes</th>
						</tr>
						<tr>
								<td class="graymiddle" width="25%">  7-bit</td>
								<td class="graymiddle">a single 7-bit quantity</td>
								<td class="graymiddle">example: <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#ISO">ISO</a> 646 </td>
						</tr>
						<tr>
								<td class="graymiddle">  8-bit G0/G1 </td>
								<td class="graymiddle">a single 8-bit quantity</td>
								<td class="graymiddle">with constraints on use of C0 and C1 spaces</td>
						</tr>
						<tr>
								<td class="graymiddle">  8-bit </td>
								<td class="graymiddle">a single 8-bit quantity </td>
								<td class="graymiddle">with no constraints on use of C1 space</td>
						</tr>
						<tr>
								<td class="graymiddle">  8-bit <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#EBCDIC">EBCDIC</a></td>
								<td class="graymiddle">a single 8-bit quantity </td>
								<td class="graymiddle">with the EBCDIC conventions rather than <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#ASCII">ASCII</a> conventions</td>
						</tr>
						<tr>
								<td class="graymiddle">16-bit (<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UCS">UCS</a>-2) </td>
								<td class="graymiddle">a single 16-bit quantity </td>
								<td class="graymiddle">within a code space of 0..FFFF</td>
						</tr>
						<tr>
								<td class="graymiddle">32-bit (<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UCS">UCS</a>-4) </td>
								<td class="graymiddle">a single 32-bit quantity </td>
								<td class="graymiddle">within a code space 0..7FFFFFFF</td>
						</tr>
						<tr>
								<td class="graymiddle">32-bit (<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UTF">UTF</a>-32) </td>
								<td class="graymiddle">a single 32-bit quantity </td>
								<td class="graymiddle">within a code space of 0..10FFFF</td>
						</tr>
						<tr>
								<td class="graymiddle">16-bit <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#DBCS">DBCS</a> process code </td>
								<td class="graymiddle">a single 16-bit quantity</td>
								<td class="graymiddle">example: UNIX widechar implementations of Asian CCS's</td>
						</tr>
						<tr>
								<td class="graymiddle">32-bit <a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#DBCS">DBCS</a> process code </td>
								<td class="graymiddle">a single 32-bit quantity</td>
								<td class="graymiddle">example: UNIX widechar implementations of Asian CCS's</td>
						</tr>
						<tr>
								<td class="graylast">
										<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#DBCS">DBCS</a> Host </td>
								<td class="graylast">two 8-bit quantities</td>
								<td class="graylast">following IBM host conventions</td>
						</tr>
				</tbody>
		</table>
		<p>Examples of variable-width encoding forms:</p>
		<p>
		</p>
		<table class="gray">
				<tbody>
						<tr>
								<th class="grayfirst">Name</th>
								<th class="grayfirst">Characters are encoded as</th>
								<th class="grayfirst">Notes</th>
						</tr>
						<tr>
								<td class="graymiddle" width="25%">
										<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UTF">UTF</a>-8 </td>
								<td class="graymiddle">a mix of one to four 8-bit code units in Unicode<br />and one to six code units in 10646</td>
								<td class="graymiddle">used only with Unicode/10646</td>
						</tr>
						<tr>
								<td class="graylast">
										<a class="charclass" href="http://www.unicode.org/unicode/reports/tr17/#UTF">UTF</a>-16 </td>
								<td class="graylast">a mix of one to two 16 bit code units</td>
								<td class="graylast">used only with Unicode/10646</td>
						</tr>
				</tbody>
		</table>
		<br />Boost中提供了一个UTF-8 Codecvt Facet,可以在utf8和UCS-4(Unicode-32)之间转换.<br />使用方式如下<br /><br />  //...<br />  // My encoding type<br />  typedef wchar_t ucs4_t;<br /><br />  std::locale old_locale;<br />  std::locale utf8_locale(old_locale,new utf8_codecvt_facet&lt;ucs4_t&gt;);<br /><br />  // Set a New global locale<br />  std::locale::global(utf8_locale);<br /><br />  //  UCS-4 转换为 UTF-8<br />  {<br />    std::wofstream ofs("data.ucd");<br />    ofs.imbue(utf8_locale);<br />    std::copy(ucs4_data.begin(),ucs4_data.end(),<br />          std::ostream_iterator&lt;ucs4_t,ucs4_t&gt;(ofs));<br />  }<br /><br />  // 读入 UTF-8 ,转换为 UCS-4 <br />  std::vector&lt;ucs4_t&gt; from_file;<br />  {<br />    std::wifstream ifs("data.ucd");<br />    ifs.imbue(utf8_locale);<br />    ucs4_t item = 0;<br />    while (ifs &gt;&gt; item) from_file.push_back(item);<br />  }<br />  //...<br />UTF-8 Codecvt Facet详见<a href="http://www.boost.org/libs/serialization/doc/codecvt.html"><br />http://www.boost.org/libs/serialization/doc/codecvt.html</a><img src ="http://www.cnitblog.com/_skyfly/aggbug/15044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-08-10 09:38 <a href="http://www.cnitblog.com/_skyfly/archive/2006/08/10/15044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC8问题：升级后重编译程序，atlplus.h无法识别CStringW，请问各位是否遇到同类问题(此贴原载CSDN)</title><link>http://www.cnitblog.com/_skyfly/archive/2006/08/01/14532.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Tue, 01 Aug 2006 13:12:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/08/01/14532.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/14532.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/08/01/14532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/14532.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/14532.html</trackback:ping><description><![CDATA[
		<p>
				<br />系统在VC7.1下开发，一直没问题，最近升级到VC8，然后重新编译，报如下错误：</p>
		<p>d:\program files\microsoft visual studio 8\vc\atlmfc\include\atlplus.h(647) : error C2065: 'CStringW' : undeclared identifier<br />d:\program files\microsoft visual studio 8\vc\atlmfc\include\atlplus.h(647) : error C2146: syntax error : missing ';' before identifier 'strW'<br />d:\program files\microsoft visual studio 8\vc\atlmfc\include\atlplus.h(647) : error C3861: 'strW': identifier not found</p>
		<p>但是在atlplus.h中明明已经include过atlstr.h：<br />...<br />#include &lt;shellapi.h&gt;<br />#include "atlevent.h"<br />#include &lt;cstringt.h&gt;<br />#include &lt;atlstr.h&gt;<br />//Avoid using &lt;atlstr.h&gt; except in the registry templates (for circular dependencies).</p>
		<p>[<br />provider(name="ATL4", uuid="BC6B4B8A-0E4A-4bc9-B319-9DC2ACFB61EE")<br />];<br />...<br />...<br />GetStringAtLoc(rgStrings, dwValue, rgBytes, &amp;szReplacement);<br />CStringW strW(szReplacement ? szReplacement : rgBytes.m_aT); // 在该行报错<br />...</p>
		<p>已经查了很久，没有解决办法，请问有朋友遇到过类似的情况没有，最后如何解决的？<br /><br />======================<br /><br />问题暂时解决，办法如下：</p>
		<p>1、在atlplus.h中，用&lt;stdstring.h&gt;代替&lt;atlstr.h&gt;：<br />（stdstring.h是Joe O'Leary编写的用于取代完整取代CString的类，基于std::string）</p>
		<p>#include &lt;stdstring.h&gt;</p>
		<p>2、修改报错行：<br />CStringW strW(szReplacement ? szReplacement : rgBytes.m_aT); // 在该行报错</p>
		<p>修改为：<br />CStdStringW　strW(szReplacement ? szReplacement : rgBytes.m_aT); // 该行通过</p>
		<p>现在编译已通过，但由于我改变了系统文件&lt;atlplus.h&gt;的内容，给atl额外引入了stl的负担，会影响atl完整性和高效性。该解决办法是很不恰当的。</p>
		<p>还请各位高人给出合适的解决办法，谢谢。<br /></p>
<img src ="http://www.cnitblog.com/_skyfly/aggbug/14532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-08-01 21:12 <a href="http://www.cnitblog.com/_skyfly/archive/2006/08/01/14532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序运行后，立即隐藏到系统栏内 ( 期待更好的解决办法 )。</title><link>http://www.cnitblog.com/_skyfly/archive/2006/06/22/12699.html</link><dc:creator>龙井2008</dc:creator><author>龙井2008</author><pubDate>Thu, 22 Jun 2006 08:54:00 GMT</pubDate><guid>http://www.cnitblog.com/_skyfly/archive/2006/06/22/12699.html</guid><wfw:comment>http://www.cnitblog.com/_skyfly/comments/12699.html</wfw:comment><comments>http://www.cnitblog.com/_skyfly/archive/2006/06/22/12699.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/_skyfly/comments/commentRss/12699.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/_skyfly/services/trackbacks/12699.html</trackback:ping><description><![CDATA[
		<p>我写了一个程序，每N秒，定时对数据库进行刷新，以修正数据库内的一些数据。我把它放在启动菜单栏里，希望一开机就运行。同时希望程序一运行就隐藏到系统栏，这样不影响我使用其它程序。<br /><br />本来我是想直接在CMainDlg::OnInitDialog中用ShowWindow(SW_HIDE);的，但是很不幸，程序窗口依然显示。在网上查找一段时间以后没有找到解决办法，只好自行摸索了。<br /><br />最后我是通过延时发隐藏窗口请求来解决的（先显示窗口，等待一段时间，再隐藏窗口）。我想主窗口在CMainDlg::OnInitDialog中不能隐藏的原因，是该函数运行后，还有一些事件刷新了主窗口，所以我通过延时等待所有的主窗口事件处理完成以后再进行隐藏。<br /><br />在CMainDlg::OnInitDialog中：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 设置定时间隔</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">SetTimer(IDT_TIMER_TOSYSTRAY,DELAY_TIME</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">1000</span>
				<span style="COLOR: #000000">);</span>
		</div>
		<br />在CMainDlg::OnTimer中：<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"><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(wParam)<br />{<br /></span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> IDT_TIMER_TOSYSTRAY:<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 隐藏窗口到系统栏</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    KillTimer(IDT_TIMER_TOSYSTRAY);<br />    SendMessage(WM_CLOSE);<br />    </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> IDT_TIMER_REFRESH:<br />    </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br />}<br /></span></div><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"><span style="COLOR: #000000">LRESULT CMainDlg::OnClose(UINT </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">uMsg</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">, WPARAM </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">wParam</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">, LPARAM </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">lParam</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">, BOOL</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">bHandled</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">)<br />{<br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO: Add your message handler code here and/or call default</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (IsWindowVisible())<br />        ShowWindow(SW_HIDE);<br />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br />}<br /></span></div><img src ="http://www.cnitblog.com/_skyfly/aggbug/12699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/_skyfly/" target="_blank">龙井2008</a> 2006-06-22 16:54 <a href="http://www.cnitblog.com/_skyfly/archive/2006/06/22/12699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>