gpt4 book ai didi

c++ - 允许在模板函数中对浮点类型进行位移的变通方法

转载 作者:行者123 更新时间:2023-11-30 05:18:06 24 4
gpt4 key购买 nike

首先让我说,我理解对浮点值执行移位和其他按位运算听起来毫无意义且不明智。所以,超越“你为什么要做这样的事情”的回答......

我有一个模板化函数,用于处理将各种类型序列化和反序列化到二进制流或从二进制流反序列化的某些部分。为了从字节流中“重组”多字节类型,我以通常的方式使用位移和按位或。还请假设我已控制字节顺序和其他此类问题。

切入点,我正在模板函数中寻找一种干净的方法来可靠地将变量转换为与参数类型大小相同的整数(这样我就可以对其执行按位运算);其中该参数类型可能是 float 或任何其他任意非整数类型。伪代码示例:

uint_same_size_as(U) sameSizeInt;

U 的类型为 float 时,uint_same_size_as(U) 的计算结果为 uint32_t,或 uint64_tUdouble 类型时,等等。

有这样的动物吗?如果这是我不知道的模板的基本功能,请原谅我。

最佳答案

由于 strict aliasing rule即使您会意识到该代码导致 UB 的方式。更好的方法是将变量地址转换为 [unsigned] char *并根据字节顺序向前或向后复制。目前尚不清楚为什么您需要复杂的移位方式来实现这一点。

尽管您可以使用 std::bitset<sizeof<T>*CHAR_BIT>在您的模板中,但我强烈怀疑简单地复制和移动位是否适用于不同大小的 float 类型。

关于c++ - 允许在模板函数中对浮点类型进行位移的变通方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com