如何std::variant<unsigned long, size_t, unsigned int>
how to std::variant<unsigned long, size_t, unsigned int>
我 运行 陷入可移植性问题,这是由于 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>
>;
我 运行 陷入可移植性问题,这是由于 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>
>;