我从事为 MSVCC / Windows 编写的项目,我必须移植到 GCC / Linux。该项目有自己的字符串类,它将其数据存储在来自 Qt 的 QString 中。为了转换为 wchar_t*,最初有这种方法(适用于 Windows):
const wchar_t* String::c_str() const
{
if (length() > 0)
{
return (const wchar_t*)QString::unicode();
}
else
{
return &s_nullString;
}
}
因为 unicode() 返回一个 QChar (它是 16 位长),这在 Windows 下工作,因为 wchar_t 在那里是 16 位,但现在使用 GCC wchar_t 是 32 位长,所以它不再工作了。我试图用这个来解决这个问题:
const wchar_t* String::c_str() const
{
if ( isEmpty() )
{
return &s_nullString;
}
else
{
return toStdWString().c_str();
}
}
这样做的问题是,当这个函数返回时,对象不再存在,所以这也不起作用。我认为解决这个问题的唯一方法是:
- 不要使用 String::c_str() 并直接调用 .toStdString().c_str()
- 让 GCC 将 wchar_t 视为 16 位类型
可能性一对我来说意味着几个小时的不必要的工作,我不知道可能性二是否可能。我的问题是,如何最好地解决这个问题?我会很感激任何有用的建议。谢谢你。