OpenSiv3D icon indicating copy to clipboard operation
OpenSiv3D copied to clipboard

JSON クラスの新設計

Open Reputeless opened this issue 1 year ago • 1 comments

方針

  • JSON.hpp 内で <ThirdParty/nlohmann/json.hpp> または <ThirdParty/nlohmann/json_fwd.hpp> をインクルードするようにする。
  • 寿命の延長 https://github.com/Siv3D/OpenSiv3D/pull/1165#pullrequestreview-1798260860 を可能にする。
  • Invalid 状態を廃止する(null として扱う)。

Reputeless avatar Dec 29 '23 23:12 Reputeless

ひとまずお知らせしておきたいのは、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

tomolatoon avatar Dec 30 '23 06:12 tomolatoon