gpt4 book ai didi

Java 替代 C 宏

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:17 24 4
gpt4 key购买 nike

最近我将第 3 方哈希函数的代码从 C++ 重构为 C。这个过程相对轻松,只有一些注意事项的更改。现在我想用 Java 编写相同的函数,但遇到了一个小问题。

在 C/C++ 代码中有一个 C 预处理器宏,它将一些整数变量名称作为参数,并使用它们的内容和一些常量执行一堆按位运算。该宏在几个不同的地方使用,因此它的存在避免了相当多的代码重复。

然而,在 Java 中,没有 C 预处理器的等价物。也没有办法影响作为参数传递给方法的任何基本类型——即使自动装箱也会产生不可变对象(immutable对象)。再加上 Java 方法返回单个值这一事实,我似乎无法找到重写宏的简单方法。

我考虑过的途径:

  • 在任何地方手动展开宏:它会起作用,但从长远来看,代码重复会使事情变得有趣

    <
  • 编写一个返回数组的方法:这也可行,但它会重复生成如下代码:

    long tmp[] = bitops(k, l, m, x, y, z);

    k = tmp[0];
    l = tmp[1];
    m = tmp[2];
    x = tmp[3];
    y = tmp[4];
    z = tmp[5];
  • 编写一个将数组作为参数的方法:这意味着所有变量名称都将简化为数组元素引用 - 很难跟踪哪个索引对应哪个变量。

  • 创建一个单独的类,例如State使用适当类型的公共(public)字段并将其用作方法的参数:这是我当前的解决方案。它允许方法更改变量,同时仍然保留它们的名称。然而,它的缺点是 State类将变得越来越复杂,因为添加了更多的宏和变量,以避免在不同的 State 之间来回复制值。对象。

您将如何用 Java 重写这样的 C 宏?有没有更合适的方法来处理这个问题,使用标准 Java 6 开发工具包提供的工具(即没有第 3 方库或单独的预处理器)?

最佳答案

选项 3,创建您自己的 MutableInteger 包装器类。

struct MutableInteger{
public MutableInteger(int v) { this.value = value;}
public int value;
}

public void swap3( MutableInteger k, MutableInteger l, MutableInteger m) {
int t = m.value;
m.value = l.value
l.value=k.value;
k.value=t;
}

关于Java 替代 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346636/

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