gpt4 book ai didi

c++ - 为不同类型实现相同功能

转载 作者:行者123 更新时间:2023-12-01 14:09:32 25 4
gpt4 key购买 nike

我想为 16、32 和 64 位的不同数据类型实现相同的功能。函数中的字段会因输入位宽而异。我在下面展示了我的实现。有没有其他方法可以实现这一点?您也可以评论您在代码中看到的其他内容。

uint64_t floatAngleToBinary64Angle(float fFloatAngle)
{
const float fScaleMultiplier0 = 64.0/45.0;
const float fScaleMultiplier1 = std::pow(2, 64 - 9); // 64 for 64bits
return ((uint64_t)(fFloatAngle * fScaleMultiplier0 * fScaleMultiplier1));
}

uint32_t floatAngleToBinary32Angle(float fFloatAngle)
{
const float fScaleMultiplier0 = 64.0/45.0;
const float fScaleMultiplier1 = std::pow(2, 32 - 9); // 32 for 32bits
return ((uint32_t)(fFloatAngle * fScaleMultiplier0 * fScaleMultiplier1));
}

uint16_t floatAngleToBinary16Angle(float fFloatAngle)
{
const float fScaleMultiplier0 = 64.0/45.0;
const float fScaleMultiplier1 = std::pow(2, 16 - 9); // 16 for 16bits
return ((uint16_t)(fFloatAngle * fScaleMultiplier0 * fScaleMultiplier1));
}

最佳答案

您不能重载返回类型,但您可以使用模板函数重用实现:

template <typename T>
T floatAngleImpl(float fFloatAngle)
{
const float fScaleMultiplier0 = 64.0/45.0;
const float fScaleMultiplier1 = std::pow(2, sizeof(T)*8 - 9); // number of bits in type T
return ((T)(fFloatAngle * fScaleMultiplier0 * fScaleMultiplier1));
}

uint64_t floatAngleToBinary64Angle(float fFloatAngle)
{
return floatAngleImpl<uint64_t>(fFloatAngle);
}

uint32_t floatAngleToBinary32Angle(float fFloatAngle)
{
return floatAngleImpl<uint32_t>(fFloatAngle);
}

uint16_t floatAngleToBinary16Angle(float fFloatAngle)
{
return floatAngleImpl<uint16_t>(fFloatAngle);
}

关于c++ - 为不同类型实现相同功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61346798/

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