我一直在研究我正在从事的项目的 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;
每次都可以正常工作,即使通过使用指针作为参数的函数调用也是如此。
我的问题是代码如何知道 b_data 存储在派生结构之一中的位置?据我所知,结构仍然使用没有额外数据的压缩结构(即 3 个 int 结构仅占用 12 个字节,2 个 int 8 个字节等)。当然,它需要某种额外的数据字段来说明 a_data 和 b_data 存储在给定结构中的位置吗?
这更像是一个好奇的问题,因为无论如何它似乎都可以工作,如果有多个实现在使用中,我会很乐意接受一个例子。虽然我确实有点担心,因为我想通过进程间消息队列传输这些结构后面的字节,并想知道它们是否会在另一端被解码(所有使用队列的程序都是由同一编译器编译并在单个平台上运行)。