我在大型代码库中定义了两个类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)
};
答案 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;
};