Перечисление типа Java с пользовательскими значениями и конструктор в C++

У меня есть эта 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;
    }
}

Я хотел бы сгенерировать действительный интерфейс C++ <-> Java с использованием Djinni, но так как djinniПеречисления генерируют public enum в Java (правильно в моем случае) и enum class в C++ (с int базовый тип), он не может работать.

Это вообще возможно? Или я должен создать Джинни interface с реализацией Java и C++ с "привязками", сделанными вручную?

Заранее благодарю за любую помощь.

1 ответ

Решение

Этот вид enum Содержать много полей - довольно уникальная концепция для Java, в то время как Джинни раскрывает концепцию, которая является общей для всех языков и поддерживает перечисление, имеющее только значение int. Если вам нужен объект, который содержит несколько полей разных типов, в Джинни вам понадобится record, Вы можете использовать интерфейс, если хотите предоставить методы для пользовательского поведения, но не должны использовать их для чистых данных.

В любом случае, Джинни генерирует свои типы. Он не предназначен для прямого представления существующих типов на других языках, поэтому вам нужно написать собственную функцию преобразования, чтобы превратить ваш параметр в запись Джинни, если вы не хотите использовать запись напрямую.

Другие вопросы по тегам