ここで struct testB のサイズ (バイト単位) を取得したい:
struct testA
{
int x;
};
struct testB
{
std::string guid;
testA userData;
};
私はこのようなサイズを得ることができますが、それはばかげています:
int testA::size()
{
return sizeof(testA);
}
int testB::size()
{
return guid.size()*sizeof(TCHAR) + userData.size();
}
もっと簡単な解決策はありますか?
Ps: 当面の問題は次のようなものです。
オブジェクトをデータベースにストーリー化したいので、アプリケーションがクラッシュしたときにデータを取り戻すことができます。そこで、sqlite を使用して、構造体のすべてのメンバーを別々の行に保存しました。Protobuf メッセージのバイナリ文字列を保持するメンバーがいる以外は、すべてうまくいきます。SQL 文が無効になるため、データベースに挿入できません。
だから私は2つの解決策に行きます:
1 protobuf メッセージを json/XML テキストにシリアライズします。
2 sqlite3_bind_blob を使用してすべてのコンテンツを db にダンプします。その 3 番目のパラメーターは blob データのサイズ (バイト単位) です。問題は、構造体のサイズを取得する方法です (これは非常に複雑です)。