将 __m128i 值转换为 std::tuple
Convert __m128i value into std::tuple
想象一下,经过一些 SIMD 计算后,我得到一个 __m128i
值,其中第四个字段具有无用的零值。是否有一种简单且可移植的方法将其他三个字段转换为 std::tuple<int,int,int>
,请记住它不是 standard layout?
丑陋,但便携。我不相信有快速的解决方案,因为 std::tuple
没有定义内存布局。所以只需将这三个值复制到一个元组中即可。
std::tuple<int, int, int> to_tuple(__m128i& value)
{
auto* ptr = reinterpret_cast<int*>(&value);
return std::make_tuple(ptr[0], ptr[1], ptr[2]);
}
为什么需要这个?也许您可以通过其他方式解决您的问题。
想象一下,经过一些 SIMD 计算后,我得到一个 __m128i
值,其中第四个字段具有无用的零值。是否有一种简单且可移植的方法将其他三个字段转换为 std::tuple<int,int,int>
,请记住它不是 standard layout?
丑陋,但便携。我不相信有快速的解决方案,因为 std::tuple
没有定义内存布局。所以只需将这三个值复制到一个元组中即可。
std::tuple<int, int, int> to_tuple(__m128i& value)
{
auto* ptr = reinterpret_cast<int*>(&value);
return std::make_tuple(ptr[0], ptr[1], ptr[2]);
}
为什么需要这个?也许您可以通过其他方式解决您的问题。