2018/03/03

[c/c++]構造体の構造体も平たくする

前回の続きだ。
が、protobufはまた次以降にする。



やりたいのは、こうだ。

  • 構造体のデータを、DBに読み書きしたい
  • 労力は少なめにしたい
  • 構造体のメンバがしばしば変更される


DBとか何とか書いているが、しょせんデータというのは、データの開始位置を示すアドレスと、そのデータが何バイト続いているかというバイト数だけだ。

そのデータをどう解釈するかは、型による。
が、読み書きだけであれば型はそれほど重要では無く、このアドレスからnバイト続いているんだ、くらいしかいらないだろう。


いるとすれば、型情報とエンディアンか。
まあ、今回は同じマシンにしか戻せなくてよいということと、DBのkey名と型は結びついているという前提であれば、いらないか。


そう割り切ってしまえば、面倒ではあるが、難しくは無い。

構造体メンバを各メンバごとに保存したければ、こうなるか。


01: typedef struct {
02:     int xxx;
03: } st1;
04: 
05: typedef struct {
06:   st1 yyy;
07: };


  1. 構造体メンバyyyのオフセットを得る(offsetof()など)
  2. その中の構造体メンバxxxのオフセットとサイズを得る


両方のオフセットを足せば、開始アドレスが分かるだろう。


問題があるとすれば、ひどく面倒だ、ということだ。
protobufだったら、もう少し便利なのだろうか?

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。