c++ - 如何 std::variant
问题描述
我遇到了一个可移植性问题,这是由于size_t
平台之间的差异(有时相当于unsigned int
,有时相当于unsigned long
)
我想写的是:
"if constexpr" / "enable_if" / "whatever" (size_t == unsigned long)
using V = std::variant<unsigned int, size_t>;
else
using V = std::variant<unsigned long, size_t>;
什么是不那么丑陋的写法?
编译器资源管理器片段的链接:
https://godbolt.org/z/AZVFEz:使用 gcc 9.2 64 位size_t
<->unsigned long
https://godbolt.org/z/wWeCbW:使用 msvc 19.22 32 位size_t
<->unsigned int
解决方案
由于您想要一个条件类型别名,您可以使用std::conditional
using V = std::conditional_t<std::is_same_v<std::size_t, unsigned long>,
std::variant<unsigned int, size_t>,
std::variant<unsigned long, size_t>
>;
推荐阅读
- python - 如何根据日期向熊猫数据框添加行?
- typescript - 在类初始化程序中使用异步代码分配属性时出现问题
- mysql - 无法使用用户 root(azure) 在 127.0.0.1:3306 连接到 mysql
- r - 使用 `dplyr::case_when` 在 R 中选择一个函数
- python - 试图检查一个单词字符串是否在文本文件中,我遇到了 StopIteration 错误。我不知道为什么(关闭)
- sql - DB中的分区和索引有什么区别?(性能方面)
- android - 如何使用图像名称和路径从 Firebase 检索图像
- firebase - Firebase Emulator Cloud Functions + PubSub 订阅生产主题
- php - 在使用 laravel 雄辩关系之前必须考虑什么
- javascript - CORS在javascript中阻止发布请求