Van*_*ril 7 string com mfc cstring wstring
我在C++中有一个使用std :: string和std :: wstring的MFC应用程序,并经常从一个转换为另一个,还有很多其他的废话.我需要将所有内容标准化为单一格式,所以我想知道是否应该使用CString或std :: wstring.
在应用程序中,我需要从字符串表生成字符串,处理大量需要常量tchar或wchar_t指针的Windows调用,编辑控件,并与需要BSTR的COM对象API进行交互.
我也有字符串向量,所以CStrings向量有什么问题吗?
哪一个更好?各自的优点和缺点是什么?
例子
BSTR到wstring
CComBSTR tstr;
wstring album;
if( (trk->get_Info((BSTR *)&tstr)) == S_OK && tstr!= NULL)
album = (wstring)tstr;
Run Code Online (Sandbox Code Playgroud)
wstring到BSTR
CComBSTR tstr = path.c_str();
if(trk->set_Info(tstr) == S_OK)
return true;
Run Code Online (Sandbox Code Playgroud)
字符串资源到wstring
CString t;
wstring url;
t.LoadString(IDS_SCRIPTURL);
url = t;
Run Code Online (Sandbox Code Playgroud)
GetProfileString()返回一个CString.
整数到字符串格式:
wchar_t total[32];
swprintf_s(total, 32, L"%d", trk->getInt());
wstring tot(total);
Run Code Online (Sandbox Code Playgroud)
Roe*_*oel 10
std :: basic_string <>(或者更确切地说是它的特化)很难处理,它是STL的一个主要缺点(我一般都说C++).它甚至不知道编码 - 来吧,这是2010年.能够定义角色的大小是不够的,因为没有办法在basic_string <>中指出可变大小的字符.现在,utf-8不适合使用CString,但它并不像尝试使用basic_string那样糟糕.虽然我与上面的海报,一个标准的解决方案比其它的方法更精神认同,CString的是(如果您的项目使用MFC或ATL反正)更漂亮比的std :: string/wstring的工作:ANSI/Unicode之间的转换(通过CStringA和CStringW),BSTR,从字符串表加载,将运算符转换为TCHAR(.c_str()?真的吗?),...
CString也有Format(),虽然不安全但有些难看,但很方便.如果您更喜欢安全的格式化库,那么使用basic_string会更好.
此外,CString有一些算法作为成员函数,你需要在basic_string上执行boost字符串实用程序,如trim,split等.
CString的矢量没问题.
防止基于Windows仅对CString进行教条式解雇:如果您在Windows GUI中使用它,则无论如何该应用程序都是仅限Windows的.话虽如此,如果您的代码将来有可能需要跨平台,那么您将会遇到basic_string <>.
CString在这种情况下,我个人会选择s,因为你声明你正在BSTR使用COM,并使用COM,并在MFC中编写它.虽然wstrings会更符合标准,但你会遇到不断从一个转换到另一个的问题.由于您正在使用COM并将其编写在MFC中,因此没有理由担心将其设置为跨平台,因为没有其他操作系统具有类似Windows的COM,并且MFC已经将您锁定到Windows中.
正如您所指出的那样,CStrings还具有内置函数来帮助加载字符串并转换为BSTRs等,所有这些都是预制的并且已经构建为可以与Windows一起使用.因此,虽然您需要对一种格式进行标准化,但为什么不让它更容易使用?
| 归档时间: |
|
| 查看次数: |
3489 次 |
| 最近记录: |