weitom1982

向各位技术前辈学习,学习再学习.
posts - 299, comments - 79, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

 

上周,我花了很多心思使用模板写了一个UTF-8与UNICODE相互转换的功能(见文件 code.rar ),刚开始感觉还可以,但这几天慢慢的觉得,为什么不直接提供两个函数呢,这样不是简单方便吗?我这样的设计又能带来额外的什么好处呢?刚开始我是想提供比较方便好用以及容易扩展与维护的代码,但现在感觉到与直接提供C式的函数并没有多少额外的好处.或许这样的简单功能根本就用不着这样复杂的代码吧.正如Eric Raymond对C++的评价一样,它"使程序员倾向于写复杂的代码".
我想大家看看我的代码,给我一点意见和建议.

posted on 2005-09-29 20:34 可冰 阅读(541) 评论(8)  编辑 收藏收藏至365Key 所属分类: C++UTF-8

Feedback

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-29 21:27 cpunion

下载不了。

前几天看你写了个模板方式的,感觉是不必要,模板一般用在批量产生代码、加强类型检查、提高效率、普通代码不好解决问题的时候。  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-29 23:05 可冰

谢谢提醒.我已经将文件转放在博客园上,现在可以下载了.  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-29 23:18 cpunion

直接使用2个函数,unicodeToUtf8, utf8ToUnicode更简单。

从你的模板参数可以得知,2个int值的模板参数将推导出2个类型,最终还是被映射到2个不同的算法上了,不如简单地做:

string convert (const wstring& src);

wstring convert (const string& src);  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-29 23:30 可冰

嗯,确实是.
你说的是对的,模板不能滥用,"模板一般用在批量产生代码、加强类型检查、提高效率、普通代码不好解决问题的时候".以后我会记住的.
其实,我确实可能是有一点追求复杂代码的倾向,写代码时考虑代码最多,而不是具体的运用.在这一点上我是走错路了.
以后一定要改!  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-30 09:02 ilovevc

恕我直言, 你这个程序写得并不好, 一看就是看设计模式走火入魔的一种.
1. singleton根本就不需要, 而且在没有GC的C++中还带来了释放的问题. 你就提供几个static 成员函数就可以了.
2. 过多的类层次,什么ConcreteConvert, 虚函数根本没有必要, 实际上最后就是两个类, 每个类有一个static member function进行转换就可以了.
3. 使用模板可以, 但是你这个模板没有太多意思. 可以考虑使用iterator的concept, 例如 convert(In src_first, In src_last, Out out_first), 这样可以很灵活, 例如使用一个string的back_inserter作为Out参数就可以自动分配内存.
4. 界面不直观. 看你的cpp文件就知道. 我认为的界面可能有一下形式:
uncode_convert<utf-8, unicode>(......);
unicode_convert<unicode, utf-8>(....);

总之, 本质原因我认为并不是你过于**追究**复杂代码, 而是你解决问题的时候使用了复杂的方式.   回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2005-09-30 13:13 可冰

谢谢你的批评.我也正是认识到这个问题后来向大家寻求帮助的.
另外你给我建议很不错的,可以考虑那样的实现.  回复  

# re: 评价一下UTF-8与UNICODE相互转换的代码 2006-02-15 03:33 Edward

请教:
I build a function:

wstring mbstowcs(const string &str) {
size_t len=mbstowcs(NULL, str.c_str(), str.length());
wchar_t *pwc = (wchar_t *)malloc( len* sizeof( wchar_t ));
len=mbstowcs(pwc, str.c_str(), str.length());
return wstring(pwc,len);
}

"str" is a chinese string. but after convertion, "pwc" is a string that I couldn't read. 乱码。Why? 我的计算机是英文windwos,但可以输入和显示汉字。

只有注册用户登录后才能发表评论。