将 __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]);
}

为什么需要这个?也许您可以通过其他方式解决您的问题。