STL的string和wstring
STL有字符串处理类——stirng和wstring,但是用的时候会觉得不是很方便,因为它不能像TCHAR一样根据定义的宏在char类型字符串和wchar_t进行转换,总不能因为程序要Unicode就把所有类型转换一遍吧?有没有好办法?
答案当然是肯定的,先看看MS的TCHAR是怎么做的,以下摘自MS Platform 的tchar.h,略有删减
#ifdef _UNICODE
#ifdef __cplusplus } /* ... extern "C" */ #endif
/* ++++++++++++++++++++ UNICODE ++++++++++++++++++++ */
#include <wchar.h>
#ifdef __cplusplus extern "C" { #endif
#if !__STDC__ typedef wchar_t TCHAR; #endif ...
#ifdef _MBCS
/* ++++++++++++++++++++ MBCS ++++++++++++++++++++ */
#ifdef __cplusplus } /* ... extern "C" */ #endif
#include <mbstring.h>
#ifdef __cplusplus extern "C" { #endif
#ifndef __TCHAR_DEFINED typedef char _TCHAR; typedef signed char _TSCHAR;
#if !__STDC__ typedef char TCHAR; #endif
看到了吧,TCHAR就是根据_MBCS和_UNICODE宏来作为char和wchar_t的typedef。
下面再看看string和wstring两个类:
typedef basic_string<char, char_traits<char>, allocator<char> > string; typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring; 原来string和wstring也是个typedef,都是模板basic_string的具现,既然只是个模板具现,那么其实现是不依赖于具体类型的,这也就是模板的意义——把实现从具体类型中抽象出来。
那么我们可以自己做个tstring:
typedef basic_string<TCHAR, char_traits<TCHAR>, allocator<TCHAR> > tstring;
这样tstring就可以根据宏的不同而成为string或wstring,用的时候只需要定义需要的宏,不用大面积修改代码了。
模板赋予了STL强大的功能,一个通用的库肯定不能包容所有需要,但是良好的库应该有良好的扩展性,像string、wstring,既然不能满足日常开发中灵活的转换,那么我们就自己动手,具现一个tstring,stirng中所有的成员函数、算法都不用实现,除非你有特殊需要,因为模板已经将这些函数、算法都实现好了,我们要做的只需要具现就好了。
其实不止string和wstring,fstream和wfstream也可以像string和wstring一样,通过basic_fstream模板具现一个tfstream
这就是模板强大的威力,也只有C++拥有如此强大的能力。
在这里感谢一下Senior Fat Chan的思路
更方便的用法:
#ifdef _UNICODE
typedef wstring tstring;
#else
typedef string tstring;
#endif
STL的string和wstring的更多相关文章
- [C++]C++标准里 string和wstring
typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; 前者string是常用类型, ...
- 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换 [转]
本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下. #ifndef USE_H_ #define USE_H_ # ...
- 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换
本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下: #ifndef USE_H_ ...
- string 到 wstring的转换
string 到 wstring的转换_一景_新浪博客 string 到 wstring的转换 (2009-08-10 20:52:34) 转载▼ 标签: 杂谈 ...
- How to convert string to wstring?
How to convert string to wstring? - Codejie's C++ Space - C++博客 How to convert string to wstring ...
- 利用boost做string到wstring转换,以及字符集转换 - Error - C++博客
利用boost做string到wstring转换,以及字符集转换 - Error - C++博客 利用boost做string到wstring转换,以及字符集转换 #include <boost ...
- string 与wstring 的转换
std::wstring StringToWString(const std::string &str) { std::wstring wstr(str.length(),L' '); std ...
- STL基础--String
String 构造 string s1("Hello"); string s2("Hello", 3); //s2: Hel string s3(s1, 2); ...
- 基于标准库实现string和wstring的转换
// convert string to wstring std::wstring to_wstring(const std::string& str, const std::locale&a ...
随机推荐
- AFNetwork 作用和用法详解
转自:http://www.cnblogs.com/mkai/p/5729685.html AFNetworking是一个轻量级的iOS网络通信类库.它建立在NSURLConnection和NSOpe ...
- js完美转换阿拉伯数字为数字大写(原创)
啥都不说,直接上代码: //阿拉伯数字转换为简写汉字 function Arabia_To_SimplifiedChinese(Num) { for (i = Num.length - 1; i &g ...
- redis Transaction支持
前面主要介绍了redis数据类型,这里讲下事务问题 NoSQL都不支持事务,虽然Redis的Transactions提供的并不是严格的ACID的事务(比如一串用EXEC 提交执行的命令,在执行中服务器 ...
- linux下实时查看tomcat运行日志
查看实时日志: tail -f catalina.out Ctrl+c 是退出tail命令
- Silverlight 上传文件源代码
public class FileUploadArgs : EventArgs { public string FileName { get; set; } public Exception Ex { ...
- .NET Interop.SHDocVw和MSHTML引用如何操作
Interop.SHDocVw:引用Com:Microsoft HTML Object Library 和 Microsoft Internet Controls MSHTML:引用-->COM ...
- OperationalError: (2002, “Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)”)
OperationalError: (2002, “Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld ...
- 改变tableView索引颜色
_tableView.sectionIndexBackgroundColor = [UIColor clearColor]; _tableView.sectionIndexColor ...
- ( 转)基于.NET平台常用的框架整理
自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就 ...
- 跟我一起学WCF(4)——第一个WCF程序
一.引言 前面几篇文章分享了.NET 平台下其他几种分布式技术,然而前面几种分布式技术专注于某一特定的领域,并且具有不同编程接口,这使得开发人员需要掌握多个API的使用.基于这样的原因,微软在.NET ...