与遗留 TCHAR 代码交互的正确样式

2024-01-01

我正在修改广泛使用 TCHAR 的其他人的代码。在我的代码中使用 std::wstring 是更好的形式吗? wstring 应该等同于 Widechar 平台上的 TString,所以我没有看到问题。基本原理是,使用原始 wstring 比支持 TCHAR 更容易......例如,使用 boost:wformat。

下一个维护者会更清楚哪种风格?我自己浪费了几个小时试图理解字符串的复杂性,似乎仅仅使用 wstring 就会切断你需要理解的一半内容。

typedef std::basic_string<TCHAR> TString; //on winxp, TCHAR resolves to wchar_t
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;

...唯一的区别是分配器。

在不太可能的情况下,您的程序 登陆到 Window 9x 机器上,有 仍然是一个可以翻译的API层 将 UTF-16 字符串转换为 8 位字符。 使用 TCHAR 没有任何意义 用于新代码开发。source https://stackoverflow.com/questions/3240609/at-runtime-how-can-i-tell-if-im-on-winxp-win32/3241266#3241266


如果您只想针对 Unicode (wchar_t) 平台,那么最好使用 std::wstring。如果你想支持多字节和 Unicode 构建,你将需要使用 TString 和类似的。

另请注意,basic_string 根据传入的字符类型将 char_traits 和分配器默认为 1,因此在 UNICODE(或 _UNICODE,我永远不记得是哪个)的构建中,TString 和 wstring 将是相同的。

注意:如果您只是将参数传递给各种 API,而不对它们进行任何操作,那么最好使用const wchar_t *而不是直接使用 std::wstring (特别是混合 Win32、COM 和标准 C++ 代码时),因为您最终会减少转换和复制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与遗留 TCHAR 代码交互的正确样式 的相关文章

随机推荐

  • Spring 数据与 cassandra 给出 IllegalStateException

    我对卡桑德拉完全陌生 所以我的错误可能很明显 我正在尝试使用 spring boot 版本 2 3 0 M2 创建一个应用程序 该应用程序与本地主机中安装的 cassandra 版本 3 11 6 联系 我收到 java lang Ille
  • 如何在 PHP 和 ASP.net 应用程序之间共享会话?

    我的公司接管了一些旧的 php 应用程序 由于我们更喜欢 ASP net 并且缺乏以前的开发人员提供的任何文档 因此我们不想花费太多资源来使用 PHP 进行开发 为了实现新功能 我们将创建一个对用户具有相同外观的 Asp net 应用程序
  • 在 C# 中附加数组的最有效方法?

    我正在以双精度数组的形式从老式 ActiveX 中提取数据 我最初并不知道我将实际检索到的最终样本数量 当我将这些数组从系统中取出时 在 C 中将它们连接在一起的最有效方法是什么 您无法附加到实际的数组 数组的大小在创建时是固定的 相反 使
  • 使用ggplot和facet_wrap从0开始Y轴[重复]

    这个问题在这里已经有答案了 我正在使用以下代码 x breaks lt seq as Date 2010 1 1 as Date 2015 4 1 months x labels lt as character x breaks forma
  • 如何避免通过参数依赖查找显式专门化模板化函数

    So 我已经写了一个答案 https stackoverflow com a 41125514 2642059它使用模板化函数来选择对象类型 我已经定义了类型 struct pt double t double e double c vis
  • 如何对 UIView 应用多个遮罩

    我有一个关于如何将多个蒙版应用到已经有蒙版的 UIView 的问题 情况 我有一个带有活动蒙版的视图 它在左上角创建一个洞 这是一个模板 UIView 可在项目中的任何地方重用 在项目的后期 我希望能够创建第二个孔 但这次是在右下角 这不需
  • 如何计算出 TListBox.ScrollWidth 使用哪些值?

    我正在尝试弄清楚如何设置ScrollWidth on a TListBox控制水平滚动条 这是我的第一次尝试 program ListBoxSizing uses Math Forms StdCtrls var Form TForm Lis
  • 如何在iOS中的UICollectionView中流畅播放多个视频?

    我想在我的收藏视图中无限循环播放多个视频 每个视频代表一个单元格 我正在使用 ALAsset 我正在使用 AVPLayer 播放此游戏 但加载和播放不流畅 有什么建议 UICollectionViewCell collectionView
  • R:如何计算n-choose-k中的大数? [复制]

    这个问题在这里已经有答案了 对于班级作业 我需要创建一个计算 n 选择 k 的函数 我就是这么做的 对于较小的数字 例如 6 选择 2 它可以正常工作 但我应该让它在 200 选择 50 的情况下工作 但它自然不能 答案太大 R 输出 Na
  • 如何在不使用 StringBuilder 的情况下从字符串(而不是数组)中删除重复项?

    我正在使用我的程序 我需要从用户给我的字符串中删除重复的字符 我参考了其他问题 但他们都在使用StringBuilder删除重复项 但是 有没有办法在不将字符串转换为数组的情况下删除重复项 使用StringBuilder and Set 我
  • Symfony 致命错误

    Symfony 运行正常 但在浏览器中打开后出现此错误 我的所有控制器都是空的 响应 FatalThrowableError Type error Return value of Doctrine Common Annotations An
  • System.DirectoryServices.DirectoryEntry 的所有可能的架构类名称是什么?

    使用时System DirectoryServices DirectoryEntry SchemaClassName https msdn microsoft com en us library system directoryservic
  • 如何安装适用于 Python 3.x 的 psycopg2?

    几天前刚开始使用 Python 我正在使用 PyCharm 和 Django 开发 Web 应用程序 我已经安装了 libpq dev python dev 软件包 但它仍然抛出同样的错误 psycopg psycopg h 30 20 f
  • SQL Server 包含未返回预期结果的全文函数

    我不太明白为什么我从以下查询 语句中得到意外的结果 我已经包含了复制该问题的代码 这可能根本不是问题 但更多的是我对如何进行的误解contains works create table dbo temp id int identity de
  • 如何使用 jquery 在页面加载和每次刷新时随机更改内联图像?

    在每次刷新或加载页面时随机显示文件夹中的内联图像的最佳轻量级方法是什么 使用 jQuery 就像这个的 jQuery 版本http javascript internet com miscellaneous random image htm
  • 帮助创建随机字符串

    我需要创建一个长度在 6 到 10 之间的随机字符串 但有时它只生成大约 3 到 5 的长度 这是我的代码 任何人都可以找出问题所在吗 int lengthOfName int Math random 4 6 String name ran
  • 在 Android 中禁用链接周围的橙色突出显示

    我已经尝试了一百万次来删除 Android webview 上链接周围烦人的橙色突出显示框 但它们似乎并没有消失 不 这不起作用 webkit tap highlight color rgba 0 0 0 0 important 我真的很困
  • 在 Windows 上的 Visual Studio 代码编辑器上运行 C# 控制台应用程序

    有没有办法在 VSCode 编辑器中创建 从头开始 并运行简单的 C 控制台应用程序 您能否提供我如何做到这一点的分步说明 我必须包含哪些类型的文件 显然 HelloWolrd cs 除外 我必须执行什么样的命令 Navigate to t
  • C# 中的分布式计算

    我有一个特定的 DLL 其中包含一些语言处理类和方法 其中一种方法获取一个单词作为参数 并进行大约 3 秒的一些计算 并将相关结果保存在 SQL Server 数据库上 我想在 900k 字上运行这个 DLL 方法 并且这项工作可能每周重复
  • 与遗留 TCHAR 代码交互的正确样式

    我正在修改广泛使用 TCHAR 的其他人的代码 在我的代码中使用 std wstring 是更好的形式吗 wstring 应该等同于 Widechar 平台上的 TString 所以我没有看到问题 基本原理是 使用原始 wstring 比支