私は 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 ビット型として扱うようにする
可能性 1 は、私にとって数時間の不必要な作業を意味し、可能性 2 が可能かどうかはわかりません。私の質問は、この問題を最もよく解決するにはどうすればよいですか? 有益な提案をいただければ幸いです。ありがとうございました。