我正在用DirectX 10和C++开发一个小游戏,我发现各种不同类型的字符串对各种不同的DirectX/win32函数调用都是必需的。
有人能推荐各种字符串中哪种是最好使用的吗?理想情况下,它将是一种类型的字符串,可以很好地转换为其他类型(主要是LPCWSTR和LPCSTR)。到目前为止,我一直在使用std::string和std::wstring,并使用.c_str()函数将其转换为正确的格式。
我只想得到一种类型的字符串,我用它传递给所有函数,然后在函数内部进行强制转换。
与c_str()
一起使用std::wstring
。我认为没有理由在Windows上使用std::string
,您的代码也可以始终使用本机UTF-16编码。
我也会坚持使用std::wstring
。如果你真的需要在某个地方通过std::string
,你仍然可以在飞行中转换它:
std::string s = "Hello, World";
std::wstring ws(s.begin(), s.end());
它也起着相反的作用。
如果您使用的是Native COM(#import <type_library>
的东西),那么_bstr_t
。它原生地对LPCWSTR和LPCSTR进行类型转换,并且与COM的内存分配模型非常吻合。无需.c_str()
调用。