C++ 如何使用std::variant<;无符号长、大小、无符号整数>;
我遇到了一个可移植性问题,这是因为不同平台的C++ 如何使用std::variant<;无符号长、大小、无符号整数>;,c++,enable-if,C++,Enable If,我遇到了一个可移植性问题,这是因为不同平台的大小不同(有时相当于无符号int,有时相当于无符号long) 我想写的是: “if constexpr”/“enable_if”/“whatever”(大小\u t==无符号长) 使用V=std::variant; 其他的 使用V=std::variant; 什么是不那么难看的写作方式 指向编译器资源管理器代码段的链接: :使用gcc 9.2 64位,其中size\u tunsigned long :使用msvc 19.22 32位,其中大小\u
大小不同(有时相当于无符号int
,有时相当于无符号long
)
我想写的是:
“if constexpr”/“enable_if”/“whatever”(大小\u t==无符号长)
使用V=std::variant;
其他的
使用V=std::variant;
什么是不那么难看的写作方式
指向编译器资源管理器代码段的链接:
:使用gcc 9.2 64位,其中size\u t
unsigned long
:使用msvc 19.22 32位,其中大小\u t
无符号int
由于需要条件类型别名,因此可以使用
使用V=std::conditional\u t;
谢谢!我真希望“if constexpr”能处理好它。我想我需要将“std::conditional”添加到我笨拙的“ifs”集合中(连同enable_if和#ifdef):-)
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>
>;