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

ifdef _MBCS

/ ++++++++++++++++++++ MBCS ++++++++++++++++++++ /

ifdef __cplusplus } / … extern “C” / #endif

include

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

那么我们可以自己做个tstring:

typedef basic_string

这样tstring就可以根据宏的不同而成为string或wstring,用的时候只需要定义需要的宏,不用大面积修改代码了。

模板赋予了STL强大的功能,一个通用的库肯定不能包容所有需要,但是良好的库应该有良好的扩展性,像string、wstring,既然不能满足日常开发中灵活的转换,那么我们就自己动手,具现一个tstring,stirng中所有的成员函数、算法都不用实现,除非你有特殊需要,因为模板已经将这些函数、算法都实现好了,我们要做的只需要具现就好了。

其实不止string和wstring,fstream和wfstream也可以像string和wstring一样,通过basic_fstream模板具现一个tfstream

这就是模板强大的威力,也只有C++拥有如此强大的能力。

在这里感谢一下Senior Fat Chan的思路

更方便的用法:

Original: https://www.cnblogs.com/MaxWoods/p/4093697.html
Author: Max Woods
Title: STL的string和wstring

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/552604/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Vue(十二)—组件通信

    参考文章:https://blog.csdn.net/qq_37288477/article/details/86630428 父子通信: 1.父传子props 官网demo:ht…

    技术杂谈 2023年7月25日
    064
  • Linux命令行如何实现sftp限速传输

    上周遇到一个需要在Linux命令行模式下进行sftp限速传输的场景(公司带宽占用限制) 百度后无果,问老江湖F哥也没办法(百度出的结果都是用lftp指令,内网环境无法安装) 实在不…

    技术杂谈 2023年7月11日
    0106
  • 推荐一种可行的编程学习路径——自学培训课程

    1、自我介绍 本菜鸟毕业于一所普通学校,专业是软件工程,也就是所谓的科班出身,在大学前3年的学习生涯中,并没有太多的一个专业知识的积累。学的东西很杂,感觉啥都会一点,啥都不精通,在…

    技术杂谈 2023年7月11日
    068
  • 在Windows Server 2022 上安装 容器主机(Containers)

    容器用于从小型应用程序运行到大型软件。容器主机是 Docker 守护程序和 Docker 客户端上运行的操作系统。我们将使用最新版本的 Window Server 2022,下面我…

    技术杂谈 2023年5月31日
    081
  • IM系统-消息流化一些常见问题

    原创不易,求分享、求一键三连 之前说过IM系统的一些优化,但是在网络上传输数据对于数据的流化和反流化也是处理异常情况的重点环节,不处理好可能会出现一些消息发送成功,但是解析失败的情…

    技术杂谈 2023年6月1日
    0105
  • R及R Studio下载安装教程(超详细)

    R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。 如果你是一个计算机程序的初学者并且急切地想了解计算机的通用编程,R 语言不是一个很理想的选择,…

    技术杂谈 2023年7月25日
    0192
  • 4.如何避免缓存穿透、缓存击穿、缓存雪崩

    先来看一下缓存穿透,是指业务请求穿过了缓存层,落到持久化存储上。在大多数场景下,我们应用缓存是为了承载前端业务请求,缓存被击穿以后,如果请求量比较大,则会导致数据库出现风险。 以双…

    技术杂谈 2023年7月24日
    085
  • 罗德岛

    自从转行以后就建博了,一直没有动手写内容,今天开始写。 主要记录技术上的积累和项目上的工作感悟。 这里就是罗德岛,就在这里跳。 Original: https://www.cnbl…

    技术杂谈 2023年6月21日
    078
  • [学习笔记]Java继承

    继承是面向对象编程的基石,它允许创建不同等级层次的类; 继承使得子类拥有父类的特征和行为,但是子类又可以拥有自身的特性; 通过使用继承也可以提高代码的复用性从而不用多次编写同样的代…

    技术杂谈 2023年7月24日
    062
  • 全局重置 table 的 pageSizeOptions

    场景: 用户数据量较大,默认的分页不适合,需要实现重置 思路: Table 组件 pagination 与 Pagination 的是一致的 方案: 根目录 src/app.tsx…

    技术杂谈 2023年5月31日
    093
  • Apache Beam WordCount编程实战及源码解读

    概述:Apache Beam WordCount编程实战及源码解读,并通过intellij IDEA和terminal两种方式调试运行WordCount程序,Apache Beam…

    技术杂谈 2023年5月31日
    063
  • go和delphi基于proto数据标准

    go和delphi基于proto数据标准 用代码工厂生成units.proto 用代码工厂生成DELPHI rest CRUD 用protoc将units.proto生成GO代码u…

    技术杂谈 2023年5月30日
    080
  • 语法糖甜不甜?巧用枚举实现“状态”转换限制

    语法糖 语法糖(Syntactic sugar),也被译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语…

    技术杂谈 2023年7月11日
    071
  • 技术管理进阶——什么是公司文化

    原创不易,求分享、求一键三连 Hi,各位亲爱的小伙伴,小钗公号遵循日复盘->周复盘->月复盘->季度复盘->年总结策略,所以某类型文章到后期才会成体系。 今…

    技术杂谈 2023年6月1日
    0111
  • 阿里云 Docker 设置阿里云镜像加速

    1、登录阿里云 找到页面 容器镜像服务 2、找到…

    技术杂谈 2023年7月25日
    068
  • 手撕快速排序(含图解和两种实现代码含改进)

    摘要 快速排序其实也是分而治之的思想 快速排序是递归的 首先找一个基准点,把比基准点小的数字都放到它的左边,比它大的数字都放在它的右边,一趟下来基准点的位置找到了,且它左边的数字小…

    技术杂谈 2023年6月21日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球