yms*_*yms 11 visual-c++ windows-8 windows-runtime c++-cx
我试图在"Windows Store"(又名Metro Style)应用程序中用C++/CX编写几行代码,我很惊讶地发现Platform :: String缺少许多基本的字符串操作,如"replace"或"指数".
我想我可以使用内部数据,将其传递给std:string实例并应用我需要的操作,但我想知道我是否缺少一些"仅限Platform ::*"的方法来执行这些操作.
请注意这个问题是关于C++/CX,而不是C#.
Jam*_*lis 18
Windows运行时字符串类型HSTRING是不可变的并且是引用计数.
将Platform::String在C++/CX类型只是周围的包装HSTRING类型和操作的,它支持少数(见与启动功能Windows在Windows运行时C++函数列表).
没有操作可以改变字符串,因为字符串类型是不可变的(因此没有Replace).有一些非变异操作(当然少于C++ std::wstring).
Platform::String确实提供Begin()和End()成员函数(和非成员begin()和end()过载)返回随机访问迭代到字符串(它们返回指针,wchar_t const*和指针是有效的随机访问迭代).您可以将这些迭代器与任何采用随机访问迭代器的C++标准库算法一起使用,并且不会尝试改变基础序列.例如,考虑使用std::find查找第一次出现的字符的索引.
如果您需要改变字符串,请使用std::wstring或std::vector<wchar_t>.理想情况下,考虑在程序中std::wstring尽可能多地使用C++ ,并且只使用Platform::String需要与其他Windows运行时组件(即跨越ABI边界)进行互操作的C++/CX .
oll*_*llb 11
那是因为它不是std :: string的替代品.来自文档:
Platform :: String Class提供了几种常见字符串操作的方法,但它并不是一个功能齐全的字符串类.在C++模块中,使用标准C++字符串类型(如wstring)进行任何重要的文本处理,然后在将结果传递给公共接口或从公共接口传递之前将最终结果转换为Platform :: String ^.
http://msdn.microsoft.com/en-us/library/windows/apps/hh699879.aspx
因此,底线是:std::wstring像在C++中习惯一样使用,只Platform::String在需要时转换为.
我认为它可能更好,因为Platform::String有一些相当混乱的语义(例如nullptr,空字符串是相同的,所以ref new String() == nullptr是真的).
| 归档时间: |
|
| 查看次数: |
6933 次 |
| 最近记录: |