在 C++ 中具有自定义值和构造函数的 Java 类型枚举

标签 java c++ djinni

我有这个 Java enum,我需要与之交互:

// Parameter.java
public enum Parameter {
    ExampleParameter1(45920L, 3, 127, ValueFormat.BINARY,       true),
    ExampleParameter2(45703L, 6, 6,   ValueFormat.NUMERIC,      true),
    ExampleParameter3(73L,    4, 4,   ValueFormat.ALPHANUMERIC, true),
    ExampleParameter3(4512L,  2, 11,  ValueFormat.ALPHANUMERIC, true);

    ( . . . )

    private ValueFormat a
    private int b;
    private long c;
    private boolean d;

    private Parameter(long tag, int param, int min, ValueFormat format, boolean boo)
    {
        this.a = format;
        this.b = min;
        this.c = tag;
        this.d = boo;
    }
}

我想使用 Djinni 生成一个有效的 C++ <-> Java 接口(interface),但是由于 djinni 的枚举在 Java 中生成了 public enum(在我的例子中是正确的)和 C++ 中的 enum class(int 底层类型),它无法工作。

这可能吗?还是我必须创建一个 Djinni interface,其中包含 Java 和 C++ 实现以及手动创建的“绑定(bind)”?

在此先感谢您的帮助。

最佳答案

这种包含许多字段的 enum 是 Java 非常独特的概念,而 Djinni 公开了所有语言通用的概念,它支持只有一个 int 值的枚举。如果您想要的是一个包含多个不同类型字段的对象,在 Djinni 中您将需要一个 record。如果您想为自定义行为公开方法,则可以使用接口(interface),但不需要为纯数据公开。

无论如何,Djinni 都会生成自己的类型。它无意将现有类型直接公开为其他语言,因此如果您不想直接使用该记录,则需要编写自己的转换函数将您的参数转换为 Djinni 记录。

关于在 C++ 中具有自定义值和构造函数的 Java 类型枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46971664/

相关文章:

java - 为什么我在这里得到 java.lang.InstantiationException ?

c++ - 如何声明一个带有成员函数指针的函数

c++ - 为什么 b.isEm() 在不同的行打印不同的东西?

ios - Djinni swift 项目链接错误

c++ - djinni - C++ 和 swift/objective C/java 之间的指针和循环引用

java - Java 中重写 equals() 方法 (OCJP)

maven - 如何通过maven下载JDK安装程序?

c++ - c_str() 的要求是否使修改非法?

libcurl - 如何在 dropbox djinni 项目中链接 libcurl

java - 再次调用同一页面不会将数据添加到数据库