gpt4 book ai didi

c++ - 动态整数大小 : int64_t, int32_t、uint32_t 等

转载 作者:行者123 更新时间:2023-11-30 01:19:04 24 4
gpt4 key购买 nike

我正在编写一个应用程序,允许用户选择整数存储的位大小并使用它进行数学计算。他们可以选择 8、16、32 或 64 位存储作为有符号或无符号。这是在运行时设置和更改的,应用程序将使用给定的类型进行数学运算。

用户交互示例:

  • 进入16位模式
  • 5C 型
  • 按加号
  • 类型 2A
  • 按评估
    • 返回 { value1.getSigned16() + value2.getSigned16();

我想避免为每个运算符(operator)编写 8 个案例。我认为指针或函数指针可能适用于此。 evaluate 方法不关心我使用的整数大小,只要它们相同即可。问题是我不知道如何实现它,因为指针关心返回的变量类型。我考虑过使用通用指针,但是当我需要取消引用时这对我没有帮助,我仍然需要 8 个案例。

value1.getProperSize() + value2.getProperSize();

// * This obviously won't work
int* getProperSize() {
if (size == 16) return (int16_t)storageValue;
if (size == 32) return (int32_t)storageValue;
// Etc...
}

非常感谢任何关于解决此问题的想法或建议。

最佳答案

函数的返回值类型不能是“任意的”。如果你想返回一个不同大小的整数,有几种方法可以做到:一个 union 、函数重载、一个模板(它将覆盖函数重载),或者一个(我在键入这个时感到畏缩) void* 返回值。

根据您的要求, union 可能是最合适的:

struct MyInteger
{
uint8_t intSize;
union
{
int8_t Int8;
int16_t Int16;
int32_t Int32;
int64_t Int64;
} intValue;
};

MyInteger getProperSize()
{
MyInteger result;
if (size == 8)
{
result.intSize = 8;
result.intvalue.Int8 = someValue;
}
// ...
return result;
}

此结构的大小至少为 72 位(不包括填充和对齐问题),因此您可以轻松地返回一个 int64_t,它会覆盖每个更小的整数大小。

关于c++ - 动态整数大小 : int64_t, int32_t、uint32_t 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21488746/

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