我应该在 ATL/WTL 中使用 CString、basic_string或其他内容吗?

发布于 2024-12-02 03:36:43 字数 669 浏览 0 评论 0原文

最近几天我只学了一点ATL(在意识到纯Win32有多么痛苦之后),还了解了WTL和MFC,从我所见,有相当多不同的字符串类可供使用我。

曾经做了这样的事情:

#include <tchar.h>
#include <string>
namespace std { typedef basic_string<TCHAR> _tstring; }

然后在我的代码中的任何地方使用_tstring。在学习了一些ATL之后,我了解到atltmp.h中有一个CString类。显然,WTL 中还有一个 CString 类,MFC 中还有一个CString 类。

不知道是否会坚持使用 ATL,或者是否会切换到 WTL、MFC 或其他东西。但现在,我正在将 Win32 代码转换为 ATL,我不确定要更改什么以及要保留什么。

我应该让我的字符串使用 CString 而不是 _tstring 吗?考虑到两者可执行文件大小(不包括共享库)可移植性/兼容性,这样做有什么好处吗?

I've only learned a little bit of ATL in the last couple of days (after realizing how much pain pure Win32 is) and also learned about WTL and MFC, and from what I see, there are quite a few different string classes available for me.

I used to do something like this:

#include <tchar.h>
#include <string>
namespace std { typedef basic_string<TCHAR> _tstring; }

and then use _tstring everywhere in my code. After learning some ATL, I learned that there's a CString class in atltmp.h. Apparently, there's another CString class in WTL, and yet another CString class in MFC.

I have no idea whether I will stick with ATL or whether I'll switch to WTL, MFC, or something else. But right now, I'm in the process of converting my Win32 code to ATL, and I'm not sure what to change and what to keep.

Should I make my strings use CString instead of _tstring? Is there any benefit in doing so, considering both executable size (excluding shared libraries) and portability/compatibility?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

女皇必胜 2024-12-09 03:36:43

对于 ATL / MFC / WTL,我的偏好是坚持使用 CString。如果您无论如何都使用这些框架,那么您就没有太多可移植性的选择;你知道他们说什么:When in Rome ...

另外,CString 确实有一些优点

  • 您可以使用 CString 从可执行文件加载资源字符串: :LoadString
  • 使用CString::GetBuffer/ReleaseBuffer 直接访问内部字符串缓冲区
  • CStringACStringA 之间进行静默转换。 CStringW
  • 使用 CString::Format 执行类似 printf 的格式化

My preference would be to stick with CString for ATL / MFC / WTL. It's not like you have much of an option for portability if you're using those frameworks anyway; and you know what they say: When in Rome ...

Also, CString does have a few niceties about it

  • You can load resource strings from executables using CString::LoadString
  • Get direct access to the internal string buffer using CString::GetBuffer/ReleaseBuffer
  • Silently convert between CStringA & CStringW
  • Perform printf-like formatting using CString::Format
清秋悲枫 2024-12-09 03:36:43

我刚刚读到的内容是 CString 不支持空字符。

我想我会继续使用STL。

Something that I just read is that CString does not support null characters.

I guess I'll keep with STL, then.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文