cyt
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2006年3月
>
日
一
二
三
四
五
六
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
统计
随笔 - 36
文章 - 0
评论 - 87
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(12)
给我留言
查看公开留言
查看私人留言
随笔分类
Work(20)
(rss)
随笔档案
2008年1月 (1)
2007年9月 (1)
2007年3月 (3)
2006年11月 (2)
2006年4月 (2)
2006年3月 (2)
2006年1月 (3)
2005年11月 (2)
2005年10月 (20)
文章分类
C/C++
(rss)
Libraries
(rss)
好友Blog
hongrui
Rayman
(rss)
Turing
废人废语
(rss)
搜索
最新评论
1. re: OCI访问Oracle的一些刁钻问题[未登录]
这个有没有具体的代码?目前正好遇上这个问题了
--paul
2. re: 使用std::vector的一个误区
很同意的你看法
--lancen
3. re: 新版本的Qu
评论内容较长,点击标题查看
--home page
4. re: 新版本的Qu
评论内容较长,点击标题查看
--Web site
5. re: 新版本的Qu
评论内容较长,点击标题查看
--this link
阅读排行榜
1. 使用std::vector的一个误区(7914)
2. epoll的安装和调试(5815)
3. 我自己的signal / slot实现(5391)
4. 如何在windows service里面控制console程序退出(4534)
5. OCI访问Oracle的一些刁钻问题(4459)
评论排行榜
1. 新版本的Qu(19)
2. 使用std::vector的一个误区(8)
3. C++博客的精华区分类构想(意见收集)(8)
4. drupal安装心得(7)
5. 补充 BVRDE 使用的一些注意问题(6)
简单的类型安全format输出后记
以前曾经写过一个类型安全的format输出,(见
http://www.cppblog.com/cyt/archive/2005/10/08/578.html
)。
今天又在codeporject里面发现有类似的CFormat(
http://www.codeproject.com/useritems/pja_format.asp
)。不过同样是那一句,很多人还是建议使用boost。不过本人老觉得boost那套东西性能有些问题,而且想把format独立出来使用基本上不可能,所以一直以来还是使用自己写的那个format_stream和format_string。
自己写的format_string在输出百分比的数据的时候有问题,理由是没有在‘%’后面加参数,所以没办法识别‘%’是占位符还是真正的‘%’号。虽然程序简单的把‘%%’认为是一个‘%’号。但是要输出百分数的时候如果写 "%%%"的话,则优先把前面的‘%%’变成了‘%’号了。我曾经把程序简单修改为碰到三个‘%’的时候,就视第一个为占位符,后面两个就合在一起变为‘%’号了。但始终在解释的时候有些怪怪的。例如连续四个‘%’,五个呢?后来,我就更干脆不改,所有输出百分数的时候一律写:str.format("percent: %").arg( nPercent, '%').str();
另外一个麻烦的就是输出16进制数的时候,那个argWithFormat参数也太多了点,有时候想简单输出一下都要填半天参数,估计参考CFormat的Hex实现也是一个不错的选择。反正只要能支持 << 操作的对象都能用在format_string里面。
format_stream/format_string的确是目前开发中用得最多的类。不过有时候讨论起来,为什么非要用format方式,难道就是因为好看的原因?前几天在看i18n,终于看到一个format_xxxx的优势:输出字符串的替换明显工作量少了很多很多。
在用javascript开发的日子,还是忘不了 format_xxxxx,于是有写了个javascript的版本:
function
_formatString( strFormat )
{
this
.format( strFormat );
}
;
_formatString.prototype.format
=
function
( strPattern )
{
this
._pattern
=
strPattern;
this
._p
=
0
;
this
._res
=
""
;
}
;
_formatString.prototype._moveToNext
=
function
()
{
for
( ;
this
._p
<
this
._pattern.length;
++
this
._p )
{
var
ch
=
this
._pattern.charAt(
this
._p );
if
( ch
==
"
%
"
)
{
++
this
._p;
if
(
this
._p
<
this
._pattern.length
&&
this
._pattern.charAt(
this
._p )
==
"
%
"
)
{
this
._res
+=
"
%
"
;
}
else
{
break
;
}
}
else
this
._res
+=
ch;
}
return
this
;
}
;
_formatString.prototype.str
=
function
()
{
this
._res
+=
this
._pattern.substr(
this
._p );
return
this
._res;
}
;
function
fmt( strPattern )
{
return
new
_formatString( strPattern );
}
;
_formatString.prototype.a
=
function
()
{
this
._moveToNext();
for
(
var
i
=
0
; i
<
arguments.length; i
++
)
{
this
._res
+=
arguments[i];
}
return
this
;
}
_formatString.prototype.s
=
function
()
{
return
this
.str();
}
用起来大概就是:
var width = 400;
var height = 340;
var left = (screen.availWidth - width) / 2;
var top = (screen.availHeight - height) / 2;
window.open('RYFL_lx.jsp', null, fmt( 'width=%,height=%,left=%,top=%').a(width).a(height).a(left).a(top).s() );
posted on 2006-03-02 16:17
cyt
阅读(1139)
评论(0)
编辑
收藏
引用
所属分类:
Work
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
如何在windows service里面控制console程序退出
补充一个OCI的问题
OpenDBX 一个访问多数据库的C类库
移植代码到64bits碰上的问题
db4o and GigaBase
实在惭愧
新版本的Qu
OCI访问Oracle的一些刁钻问题
Linux的系统性能监测参数获取
简单的类型安全format输出后记
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理