繁体   English   中英

如何 std::variant<unsigned long, size_t, unsigned int></unsigned>

[英]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>
          >;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM