gpt4 book ai didi

c++ - 在函数中传递字符串或 wstring

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:40 26 4
gpt4 key购买 nike

我想简化代码以对 ANSI 和 UNICODE 字符串版本使用相同的函数

tstring formatW(const std::string format, ...);
tstring formatA(const std::wstring format, ...);

在单个参数化函数中

tstring format(const tstring format, ...);

但是,如果我将其用作第 3 行,则会出现错误

  const std::string fmtA =  "MouseWheel nFlags %u,zDelta %d, CPoint(%d,%d";
std::string strA = formatA(fmtA, nFlags, zDelta, pt.x, pt.y ); // Ok
std::string strA2 = format (fmtA, nFlags, zDelta, pt.x, pt.y ); // Fail :(

const std::wstring fmtW = L"MouseWheel nFlags %u,zDelta %d, CPoint(%d,%d";
std::wstring strW = formatW(fmtW, nFlags, zDelta, pt.x, pt.y); // Ok
std::wstring strW2 = format (fmtW, nFlags, zDelta, pt.x, pt.y); // Fail

我得到的错误是这样的:

error C2664: ~tstring Format(const tstring,..'.)': cannot convert argument 1 from 'const std::string' to 'const tstring'

我不熟悉参数化函数。

最佳答案

charwchar_t(string/wstring 的底层类型)不兼容(8 位和 16 位),因此您不能在运行时检查环境中组合它们。

这就是为什么 Windows 有许多功能(MessageBoxA、MessageBoxW 等)的 2 个版本。

解决方案:使用将数据存储为 UTF-8 (char) 的类,然后在需要 wchar_t 时将它们转换为 16 位。或者更好,反之亦然(在内部使用 wchar_t 并在需要 char* 时将数据转换为 UTF-8)。

关于c++ - 在函数中传递字符串或 wstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56058169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com