Как я могу преобразовать в тип SWIGTYPE_p_void в SWIG-генерируемых привязках Java?
Я разрабатываю некоторые сгенерированные SWIG Java-привязки для библиотеки C. Библиотека содержит функции, которые принимают параметры типаvoid *
, На стороне C они обычно передаются как указатель на массив типаfloat
или жеint
приведение кvoid *
, В сгенерированных привязках Java это приводит к методам, которые принимают параметры типаSWIGTYPE_p_void
.
Каков наилучший способ для создания массива с плавающей точкой / целых в привязках Java, чтобы они могли быть переданы как типSWIGTYPE_p_void
к этим методам?
На данный момент я определяю вспомогательную функцию в моем файле example.i:
void *floata_to_voidp(float f[])
{
return (void *)f;
}
А затем на стороне Java делает что-то вроде этого:
float foo[] = new float[2];
SWIGTYPE_p_void av = null;
// do something with foo
av = example.floata_to_voidp(foo);
example.myfunction(av);
Это кажется довольно уродливым, особенно потому, что мне тоже нужноinta_to_voidp()
и т.д. в моем файле интерфейса SWIG для каждого преобразования типов, которое я хочу поддерживать.
Есть ли способ сделать это без вспомогательных функций и задействовать меньше дополнительного кода на стороне Java для преобразования типов данных?
UPDATE (17/6/12): дать дополнительные подробности вопроса: что я пытаюсь сделать, это взять набор функций C с прототипомint foo(const float *data, int N, const void *argv, float *result)
и сопоставить их с методами на стороне Java, где массив произвольного типа может быть передан какargv
, Обратите внимание, чтоargv
являетсяconst void *
и неvoid *
.