私が取り組んでいるプロジェクトの C++ と構造体を調べています。現時点では、「連鎖した」テンプレート構造を使用して、データ フィールドを疑似特性として追加しています。
それは機能しますが、以下の例のように多重継承のようなものを好むと思います:
struct a {
int a_data;
}; // 'Trait' A
struct b {
int b_data;
}; // 'Trait' B
struct c : public a, public b {
int c_data;
}; // A composite structure with 'traits' A and B.
struct d : public b {
int d_data;
}; // A composite structure with 'trait' B.
私の実験的なコード例は、それらがうまく機能することを示していますが、物事が複雑になったときに実際にどのように機能するかについては少し困惑しています.
例えば:
b * basePtr = new c;
cout << basePtr->b_data << endl;
b * basePtr = new d;
cout << basePtr->b_data << endl;
これは、ポインターをパラメーターとして関数呼び出しを行っても、毎回正常に機能します。
私の質問は、派生した構造体の 1 つで b_data が格納されている場所をコードがどのように認識するのかということです。私が知る限り、構造体は余分なデータのないコンパクトな構造体を使用しています (つまり、3 つの int 構造体は 12 バイト、2 つの int は 8 バイトなど)。特定の構造体のどこに a_data と b_data が格納されているかを示すには、ある種の追加のデータ フィールドが必要なのでしょうか?
それはすべて関係なく機能するように見えるので、好奇心の問題です.複数の実装が使用されている場合は、1つの例を喜んで受け入れます. プロセス間メッセージキューを介してこれらの構造体の背後にあるバイトを転送し、反対側で問題なくデコードされるかどうかを知りたいので、少し懸念があります (キューを使用するすべてのプログラムは同じコンパイラでコンパイルされ、単一のプラットフォームで実行されます)。