CString
非常方便,同时std::string
与STL容器更兼容.我在用hash_map
.但是,hash_map
不支持CString
作为键,所以我想转换CString
成std::string
.
编写CString
哈希函数似乎需要花费很多时间.
CString -----> std::string
我怎样才能做到这一点?
std::string -----> CString: inline CString toCString(std::string const& str) { return CString(str.c_str()); }
我对吗?
编辑:
以下是更多问题:
我怎么能转换wstring
,CString
彼此?
//wstring -> CString, std::wstring src; CString result(src.c_str()); //CString->wstring. CString src; ::std::wstring des(src.GetString());
有什么问题吗?
我怎么能转换std::wstring
,std::string
彼此?
根据CodeGuru:
CString
到std::string
:
CString cs("Hello"); std::string s((LPCTSTR)cs);
但是: std::string
不能总是从一个构造LPCTSTR
.即UNICODE版本的代码将失败.
由于std::string
只能从LPSTR
/ 构造LPCSTR
,使用VC++ 7.x或更高版本的程序员可以使用转换类,例如作为CT2CA
中介.
CString cs ("Hello"); // Convert a TCHAR string to a LPCSTR CT2CA pszConvertedAnsiString (cs); // construct a std::string using the LPCSTR input std::string strStd (pszConvertedAnsiString);
std::string
toCString
:(来自Visual Studio的CString常见问题解答......)
std::string s("Hello"); CString cs(s.c_str());
CStringT
可以从字符或宽字符串构造.即它可以从char*
(即LPSTR
)或从wchar_t*
(LPWSTR
)转换.
换句话说,炭专业化(的CStringT
),即CStringA
,wchar_t
-specilization CStringW
和TCHAR
-specialization CString
可以从任一构造char
或宽字符,null终止(null终止在这里非常重要)字符串来源.
Althoug IInspectable修订了"空终止"部分中的评论:
不需要NUL终止.
CStringT
具有采用显式长度参数的转换构造函数.这也意味着您可以CStringT
从std::string
具有嵌入NUL
字符的对象构造对象.
通过使用std::basic_string
而不是std::string
你的角色解决它,它应该工作正常,无论你的角色设置.
转换CString
为std::string
使用指定长度的转换更有效.
CString someStr("Hello how are you"); std::string std(somStr, someStr.GetLength());
在紧密循环中,这可以显着提高性能.