OpenSiv3D
OpenSiv3D copied to clipboard
JSON クラスの新設計
方針
- JSON.hpp 内で
<ThirdParty/nlohmann/json.hpp>
または<ThirdParty/nlohmann/json_fwd.hpp>
をインクルードするようにする。 - 寿命の延長 https://github.com/Siv3D/OpenSiv3D/pull/1165#pullrequestreview-1798260860 を可能にする。
- Invalid 状態を廃止する(null として扱う)。
ひとまずお知らせしておきたいのは、nlohmann/json の最近のアップデートで custom base class が追加されたことです。これを使うことで、nlohmann::basic_json<> のそれぞれのノードの基底クラスを注入可能になるので、それを上手く使ってなんとか出来ないかと考える方針が良いかと思います。
https://json.nlohmann.me/api/basic_json/json_base_class_t/
- 案1. 基底クラスをユーザーに使ってもらう
- ある程度トリッキーな実装が必要で、しっかりとした実装が出来るかは不明
- 独自 API を完全に導入することが出来る
- 案2. 基底クラスを注入した
nlohmann::basic_json<>
をユーザーに使ってもらう-
nlohmann::basic_json<>
で定義されているメンバ関数はオーバーライドされてしまう- そうすると、例えば
operator[]
でs3d::String
が使えなくなってしまう...
- そうすると、例えば
- その点を除けば他の部分の実装は単純・簡単
-
- 今までにやっていた作業はこちらにおいておきました
- https://gist.github.com/tomolatoon/db219d078b9cd83a51ab14d4c2358312