奇妙な質問のほんの少しの背景: 私はネットワーク フレームワーク (RTI DDS) を持っています。これには、ポインターを取り、C 構造体を文字列に変換する C シリアル化関数があります。
また、C++ クラスでも使用できます (動作するように設計されています)。しかし、仮想関数を追加して C++ クラスをポリモーフィックにすると、このシリアル化関数によってセグメンテーション違反が発生するか、さらに悪い場合には間違った出力が提供されます。
構造体のメモリ レイアウトについて内部的に仮定していると思います。
ポリモーフィック C++ オブジェクトから生の C ポインタを取得することは可能ですか?
すべての構造体を 2 回 (1 回はポリモーフィック、もう 1 回は非ポリモーフィック) 作成するだけでよいことはわかっていますが、これは途方もない量のグルー コードにつながります。
現在、私はアイデアがありません。
いくつかの技術的背景: C 関数は RTI DDS ソース パッケージにあります。
DynamicData.c DDS_ReturnCode_t DDS_DynamicData_to_cdr_buffer(...) { ..