2014年4月15日火曜日

C++: boost::property_tree::ptree にポインター値を放り込んで読み込むtips

普通にINIやJSONやXMLのファイルやストリームとコンフィグレーションのやりとりなんかに使っているとポインターをptreeに放り込もうとは思わないかもしれません。

用途があるとしたら、旧式の例えばCバスのアドレスを直接叩いて読み書きするアプリの何かしらのアドレス値だとか、最近のデバイスだとRaspberry PiのGPIOをアドレスで叩く場合とかメモリーモジュールのアドレスを直接叩くとか?


今回はINIやJSONやXMLとのserialize/de-serializeではなく、実行中のプロパティー管理に ptree を使うにあたって、具体的に言うと、開発中のゲームエンジン wonderland の subsystem モジュールの GLFW3、GLFW2、SDL2、SDL1、GLUT などに統一的に対応したウィンドウ生成パラメーター等の初期化機構に対称の具体的サブシステムの実装に依存した完全なオプションを提供したいと思い、かくかくしかじか ptree で初期化パラメーターを受け取ったら便利かなと書いてみた次第です。

例えばGLFW3のglfwCreateWindowには GLFWmonitor* と GLFWwindow* を与えられるので、ptree でポインター型を直接って対応してるかな、と確認してみた次第です。reinterpret_cast<unsigned long>してptreeに入れてunsidned longで読みだしてreinterpret_cast<X*>するという方法が必要かな、と思ったら、それよりは楽できました(╹◡╹)

putする時にはポインターを入れてあげるのも他の値を入れるのと同様に冗長な型の宣言や変換を書かずにそのままできるようなので採用しようかと思います。読み出して使うのはライブラリーの内部実装だからvoid*で読んで目的の型に変換するのはさほどの問題にはなりませんゆえ。


参考:

  1. http://www.boost.org/doc/libs/1_55_0/doc/html/property_tree.html
  2. https://sites.google.com/site/boostjp/tips/ini

0 件のコメント:

コメントを投稿