#c #swig
#c #глоток
Вопрос:
В некотором коде c , который мы хотим использовать с Java, используется вектор двойных указателей, например:
typedef std::vectorlt;double *gt; VEC_pD;
Я предположил, что будет достаточно обернуть его так:
%include "typemaps.i" %include "cpointer.i" %include "stl.i" %pointer_class(double, doublep); %template (VEC_pD) std::vectorlt;double*gt;; typedef std::vectorlt;double *gt; VEC_pD;
While double *
правильно завернут в doublep.java при обертывании вектора используется не удвоение, а скорее автогенерированный тип SWIGTYPE_p_double
.
Я использую SWIG 4.0.2. Любые подсказки, как сообщить векторному шаблону, как использовать doublep, будут высоко оценены.
Комментарии:
1. Попробуй
%template (VEC_pD) std::vectorlt;doublepgt;;
. Недавно я завернул avectorlt;vectorlt;Tgt;gt;
и использовал завернутое имя дляvectorlt;Tgt;
во внешнем определении. Мое завернутое имя дляvectorlt;Tgt;
было также Ctypedef
для того же самого; Я не знаю, имело ли это значение.
Ответ №1:
Thx Джон, действительно, переключение на doublep сгенерировало правильный класс java.
%template (VEC_pD) std::vectorlt;doublepgt;;
Комментарии:
1. Я поговорил с Суном. С учетом вышесказанного обертывание typedef std::vectorlt;double *gt; VEC_pD; само по себе использует удвоение. Однако все варианты использования в коде VEC_pD теперь переходят к SWIGTYPE_p_std__vectorT_double_p_t, поскольку исходный вектор указателей на удвоение больше не завернут.