序章
そーいえば、MSYS2 の更新を行っていなかった・・
そこで、通常の手順で更新を行った。
pacman -Sy pacman
pacman -Syu
pacman -Su
この更新で、clang64 コンパイラなどが最新バージョンにアップグレードされた。
glfw3_app をコンパイル
まず最初に行うのは、clang64 対応でコーディングしてあるアプリのコンパイルチェック。
思った通り、エラーが出て、コンパイルが停止・・・
「basic_string」関係のテンプレートでエラーとなっているようだー
※エラーのキャプチャーを忘れたので、状況説明だけ
namespace utils {
typedef std::basic_string<uint16_t> wstring;
typedef std::basic_string<uint32_t> lstring;
}
これらを使った複数のコードが通らない・・・
この実装は、7~8年前のもので、自前で、UTF-8、UTF-16、UTF-32 を扱う為に行っていたもので、UTF-8 から UTF-16 や UTF-32 に相互に変換したり、色々なサポート関数を揃えていた。
又、古い Windows の ShiftJIS コードを扱う API にも対応している。
現在は、標準で、「std::wstring、std::u32string」などがあり、又、ユニコードの扱いも標準ライブラリで対応しているので、自分で色々書かなくても良いようになっていると思うのだが・・
- 標準ライブラリで、これら文字コードを扱う実装がされていると思うが、勉強不足で、どうしたら良いか判っていない
- かと言って、昔に自分が実装して、一応動いているコードを、最新の標準ライブラリで書き直すのも、色々とハードルが高い
- そこそこの量があり、現状では、あまりやる気が起きない(動いているコードはそっとしておきたいと思う事もある)
とりあえず、コンパイルが通るように改修
そこで、最低限の修正で、コンパイルが通り、動作するのを確認するまでを行った。
utils::wstring ---> std::wstring
utils::lstring ---> std::u32string
大まかな修正は、上記の二つだけで、auto なども駆使して、書き換えた。
30分くらいの労力で、コンパイルが通り、動作も確認した。
まとめ
- 今後、最新の標準ライブラリで、どのような実装になっているのか、調査と学習が必要なようだ・・・
- 文字列の扱いをどのようにすべきなのかを、考え直す必要性がありそうだ・・・
- 標準的な窓口として、UTF-8 を使うのか、UTF-32 にするのが良いのか答えが出ていない・・・
- UTF-8 にすると、マルチバイトを含んだ文字列の部分コピーや、文字数の操作が局所的になってしまう
- UTF-32 にすると、8ビット系文字列にしか対応していないライブラリなどを使う場合に対処が必要になってしまう