C++ 相同基础类型的变体

C++ Variant of same underlying types

本文关键字:类型 C++      更新时间:2023-10-16

我有一个代码库,使用了一些typedefs的std::变体。 最初,这些是不同的类型,但现在它们重叠,如下例所示

typedef int TA;
typedef int TB;
std::variant<TA, TB> a(TA(1));

有没有一种零开销的方法来实现这项工作? 在 Scala 中,我会为此目的使用不透明类型,C++如何实现类似的东西?

可以将类型包装在类中:

struct TA {
int value;
};
struct TB {
int value;
};
std::variant<TA, TB> a(TA{1});

现在,您有两种不同的类型,每种类型都包含一个没有开销的整数,并且可以在变体中区分。


有一些技巧可以使类表现得像整数,以最大程度地减少程序中所需的更改。例如,可以定义基础类型的隐式转换运算符。然而,这些技巧也可能违反直觉,因此请谨慎使用。