c++ - 相同基础类型的 C++ 变体
问题描述
我有一个使用几个 typedef 的 std::variant 的代码库。最初,这些是不同的类型,但现在它们重叠,如下例所示
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});
现在您有两种不同的类型,每种类型都包含一个没有开销的整数,并且可以在一个变体中加以区分。
有一些技巧可以使一个类表现得像一个整数,以最小化程序中所需的更改。例如,您可以为基础类型定义一个隐式转换运算符。然而,这些技巧也可能违反直觉,因此请谨慎使用。
推荐阅读
- javascript - React Native 读取 yaml 文件
- django - django 无法显示搜索结果
- mysql - mySQL 查询:查找包含关键字的内容以及具有该关键字的对象的数量
- angular - 如何更新特定用户的按钮点击记录?
- python - 如何从字典的键中计算对象?
- python - 了解 netlib fftpack 的结果
- react-native - 反应本机地图动态位置导致未安装组件上的反应状态更新
- python - 广度优先搜索 Python 代码到深度优先搜索
- excel - 用户表单按钮不调用模块上的代码
- asp.net - 如何使用 AngularJS 使用 ASP.Net 通用处理程序文件插入数据(文件和文本)?