sakura-editor / sakura

SAKURA Editor (Japanese text editor for MS Windows)
https://sakura-editor.github.io/
Other
1.23k stars 162 forks source link

CDataProfile::_work_itow の static 変数 #530

Open m-tmatma opened 5 years ago

m-tmatma commented 5 years ago

CDataProfile::_work_itow で static 変数が定義されていて、そのアドレスを返している。

https://github.com/sakura-editor/sakura/blob/72c87d521f0301a9bda813764355ced7dccdd9bc/sakura_core/CDataProfile.h#L83-L89

呼び出し元で value_to_profile で渡された profile にデータコピーしている。 _work_itow の static 変数が使われるのは一瞬だが、実体が一個なので再入可能ではないコードに なっている。

https://github.com/sakura-editor/sakura/blob/72c87d521f0301a9bda813764355ced7dccdd9bc/sakura_core/CDataProfile.h#L109-L112

value_to_profile 側でローカル変数として文字列用のバッファを用意すれば再入可能にできる。

berryzplus commented 5 years ago

必要なら _work_itow 自体をC++標準に置き換えてしまってはどうでしょうか?

*profile = std::to_wstring(value);

標準で使える数値→文字列変換はそんなに速くなかった気がするので、 スピードを気にするなら以前beruさんが作ってくれたテンプレ関数を再利用するのが良いように思います。

value_to_profile 側でローカル変数として文字列用のバッファを用意すれば再入可能にできる。

この書き方だと後者の実装を想定してると思いますが、 前者 std::wstring のほうがより直観的なコードだと思います。