如何在c ++

时间:2019-05-20 09:33:56

标签: c++ class c++14

我在大型代码库中定义了两个类A和B。我想创建一个表示“ A或B”的类型别名。请注意,此类在运行时永远不会从A切换为B(反之亦然)。我该怎么办?

我想到的是简单地创建一个空类AorB,并使A和B都从它派生。但是,我非常希望不必修改A或B。

我考虑过使用联合,但是从内存的角度来看这似乎很浪费,因为这为最大的类保留了空间。

为更加清楚起见,下面的代码说明了我的问题:

class A;
class B;


//typedef AorB = A || B //<- how can I do sthg like that ?

class C {
   AorB myAorB; // once this object is set, it cannot change its underlying type (it stays an A or a B)
};

1 个答案:

答案 0 :(得分:4)

  

请注意,此类在运行时永远不会从A切换为B(反之亦然)

您想使用std::conditional,例如

#include <type_traits>

constexpr bool useAOrB() { /* Some actual logic here... */ return true; }

class C {
    std::conditional_t<useAOrB(), A, B> myAorB;
};