一般情况下使用STL的通用算法和string类的方法足够解决问题了。扩展std::string的动机是因为STL是跨平台的,而在Windows下,如果使用不同的GUI库,都会用到特定的字符串类,比如MFC/ATL的CString类,QT下的QString类,wxWidgets下的wxString类,后两者还好,直接用的话就好了,但是CString不是跨平台的,而且要是之前的遗留代码是使用的string,现在要移植到对应GUI下时,一般都要大幅改动。之前的做法是,写了一个iDataTypeConvertor的类,把常用的数据类型转换算法封装成该类的静态方法,如下图所示(CString与std::string的转换):
这样每次都调用静态方法,次数一多也觉得麻烦,所以觉得有必要扩展下string,使其能够按照习惯的方式来使用(如CString的Format/Replace方法)。
扩展的方法是继承,有两篇文章写的不错,可以参考:
STL中的string扩展,使其和VC的CString融合
http://blog.csdn.net/b2b160/archive/2009/07/27/4384020.aspx
编写一个STL中的CString类
www.vckbase.com/code/relateddoc.asp?id=2049
参考第一篇文章实现的扩展类,如果类外在cpp文件中定义Replace函数,链接时会出错,而放入一个头文件中则不会出问题,还有点点疑惑。
使用:
若是不想使用template,直接写:
"
也是的可以,其他方法都可以像这样添加进来,比如Format方法,这样就能够根据自己的要求来扩展string类了。第二篇文章中就实现了CString的所有方法,然后就能在工程中使用通用的类,方便不少。