我写了一个名为std::string
的字符串类,我希望可以将std::wstring
转换为std::wstring
,也可以将std::string
转换为public:
UString(std::string s);
UString(std::wstring ws);
private:
std::string str;
std::string WTS(const std::wstring & wstr);
std::wstring STW(const std::string & str);
public:
std::wstring w_str();
const wchar_t* wc_str();
。
我在c ++ 17中使用库,所以我编写了如下代码。
在UString.h中:
UString::UString(std::string s)
{
str = s;
}
UString::UString(std::wstring ws)
{
str = WTS(ws);
}
std::string UString::WTS(const std::wstring & wstr)
{
std::string ret;
try {
std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
ret = wcv.to_bytes(wstr);
}
catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
return ret;
}
std::wstring UString::STW(const std::string & str)
{
std::wstring ret;
try {
std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv;
ret = wcv.from_bytes(str);
}
catch (const std::exception & e) {
std::cerr << e.what() << std::endl;
}
return ret;
}
std::wstring UString::w_str()
{
return STW(str);
}
const wchar_t* UString::wc_str()
{
return STW(str).c_str();
}
在UString.cpp中:
UString ustr="test"; //the value should be "test"
UString ustr2=L"test2"; //the value should be "test2"
wcout<<ustr.w_str()<<endl; //the value should be "test"
cout<<ustr.wc_str()<<endl; //the value should be "test"
它应该像这样工作:
UString::w_str()
在linux,GCC 8.0.1中,该类工作正常,但是在Windows,Visual Studio 2017中,当我使用UString::wc_str()
或var materials = [{ sample: "A21" },{ sample: "A22" },{ sample: "A23" }],result = materials.map(({ sample }) => ({ [sample]: sample }));
console.log(result);
时,它无法工作并引发“错误的转换” ”错误。
我应该怎么做才能使这项工作?