如何处理不同的字符串类型
How to Deal with Varying String types?
我必须使用API,它使用微软的TCHAR宏等等,所以我想知道是否可以使用C++来简化任务。所以我想知道是否有一种方法可以支持隐式转换,为什么std::string不支持从较小的字符大小转换:
#include <Windows.h>
using String = std::basic_string<TCHAR>; // say TCHAR = wchar_t or equivalent
String someLiteralString = "my simple ansi string"; // Error here obviously
// some polymorphic class...
const TCHAR* MyOverriddenFunction() override { return someLiteralString.c_str(); }
// end some polymorphic class
不支持隐式转换的原因是转换可能很复杂。简单的情况是,要转换的字符串是纯ASCII,如您的示例所示,但无法保证这一点。该标准的制定者明智地避开了这个问题。
如果您不知道字符串是否为宽字符,可以在每个字符串文字周围使用Microsoft的_T()
宏来生成正确的字符。但你说你不想那样做。
现代Windows编程总是在API中使用宽字符。很可能你的程序也是,否则你显示的代码不会导致错误。一旦你使用了宽字符,你就不太可能切换回窄字符。对文字进行一个简单的单字符更改将使其具有宽字符以匹配字符串类型:
String someLiteralString = L"my simple ansi string";
使用(ATL/MFC)CStringT类,它将使您的生活更加轻松。
http://msdn.microsoft.com/en-us/library/ms174284(v=vs.80).aspx
相关文章:
- 如何检查模板类中的变量是否为字符串类型?
- C++类字符串类型的迭代器
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 字符串类型的 2d 数组(C++;)
- 在 Rcpp 中的字符串类型之间转换时出错
- 为什么字符串类型会导致 c++ 程序无法运行?
- 如何将字符串类型转换为 ostringstream
- 当正斜杠运算符应用于C++中的字符串类型时,它会做什么
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 我在 c++ 中声明字符串类型时遇到问题
- 对齐C++字符串类型问题 std::字符串到 TStr
- C++无符号字符串类型的正则表达式
- 当 JSON 值应为 INT 但以字符串类型发送时,RapidJSON 崩溃
- 如何使用 std::find 从向量的第一个元素中查找字符串<字符串对<字符串、字符串> >类型?
- 我想添加两个字符串类型的矩阵.用户将不会输入行数或列的数量.用户将仅输入数组
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 如何根据定义的字符串类型在“std::cout”和“std::wcout”之间进行选择
- C++ 仅当模板为字符串类型时执行小写转换
- 字符串类型的 C++ 模板无法编译
- 如何使用新字符串而不是分配器创建自己的字符串类型向量?