在C++中继承结构的最佳方式?

chr*_*irk 0 c++ performance struct class unions

假设我有以下内容:

#pragma pack(push,1)

struct HDR {
   unsigned short msgType;
   unsigned short msgLen;
};

struct Msg1 {
   unsigned short msgType;
   unsigned short msgLen;
   char text[20];
};

struct Msg2 {
   unsigned short msgType;
   unsigned short msgLen;
   uint32_t c1;
   uint32_t c2;
};

 .
 .
 .
Run Code Online (Sandbox Code Playgroud)

我希望能够重用HDR结构,所以我不必继续定义两个成员:msgType和msgLen.我不想出于性能原因而涉及vtable,但我确实想要为每个结构覆盖operator <<.基于这最后一个要求,我不知道我怎么可能使用联合,因为大小也不同.

关于如何最好地处理纯粹性能的任何想法

Oli*_*rth 10

这里的作文最合适:

struct Msg1
{
    HDR hdr;
    char text[20];
};
Run Code Online (Sandbox Code Playgroud)

虽然你可以使用C++继承,但在这种情况下它在语义上并没有意义.a Msg1不是HDR.

或者(可能优先),您可以定义抽象Msg基类型:

struct Msg
{
    HDR hdr;
protected:
    Msg() {}
};
Run Code Online (Sandbox Code Playgroud)

并拥有所有具体的消息类.


Nik*_*sov 8

普通的C++继承有什么问题?

struct HDR { ... };
struct Msg1: HDR { ... };
Run Code Online (Sandbox Code Playgroud)

只是不要声明任何虚拟成员函数,你将全部设置.

  • 这显然有效,但我认为从语义上来说,它没有组成那么有意义.`Msg1`不是'HDR`. (2认同)