我可以创建 类 的联盟吗

Can I create Union of classes

我有两个 类 用于通信,它们永远不会同时存在,但都将被使用。

示例:

class CommA
{
public:
    void SendA();
    ...
private:
    ProtocolA a;
    ...
}

class CommB
{
public:
    void SendB();
    ...
private:
    ProtocolB b;
    ...
}

是否可以将它们放在 Union 中以节省内存?

union CommAB
{
    CommA a;
    CommB b;
}

std::variant 已被其他人在评论和回答中提出。我将解释为什么这是推荐的方法。

关于工会,有一件重要的事情需要了解:工会中只有一名成员在任何时候都可以处于活动状态。如果你创建了一个AB对象,它要么是a,要么是b,如果你访问错了,它就是UB。你怎么知道哪一个是活跃的?幸运的是,该标准提供了一些保证:如果所有联合成员中的 类 以相同的公共成员开头,您可以安全地访问它们。通常的技巧是让联合的所有 类 中的第一个成员来确定哪个是活跃的。另一个问题可能是当您有一个活跃的成员并且想要更改它时。

variant 的优点是它会处理这些实际方面,您不必担心,也不必调整成员的 类。

由于您正在寻找 space:联合采用其最大成员的 space。因此,如果您必须在 类 中添加一个普通的额外成员来跟踪活跃的联合成员,那么您的联合将比初始 A 或 B 更大。变体会为您完成工作,因此它会更大以及。