SWIGTYPE объявляет typedef перед реализацией - PullRequest
0 голосов
/ 13 января 2012

У меня есть следующее определение в файле:

Файл: one.h

typedef struct example example;

И в другом файле у меня есть реализация структуры:

Файл: two.h

typedef struct example1{
     int four;
} example1;

struct example {
  int one;
  example1 four;
};

Файл: swig.i

¿?

Файл wrapper.java

 class SWIGTYPE_P_example;

  // I want to have: class example;

Когда я компилирую,swig генерирует класс SWIGTYPE_p_example вместо примера объекта.

Я понимаю, что объявление моей структуры неизвестно, и это причина, потому что у меня есть SWIGTYPE, но есть ли способ получить вОбертка правильного класса?

Ответы [ 2 ]

0 голосов
/ 13 января 2012

Решением было переопределить мой typedef в моем файле swig.i

Файл: swig.i

typedef struct example1 {int four;}

0 голосов
/ 13 января 2012

Если у вас есть файл интерфейса, который выглядит примерно так:

%module test

// Forward declare, SWIG knows nothing more:
struct example;
typedef struct example example;

void foo(example *ex);
example *bar();

(или, возможно, использует директиву %include для ввода заголовочного файла), тогда вы можете заставить SWIG делать больше, чем по умолчанию, просто добавив:

struct example {};

перед первым упоминанием примера в вашем файле интерфейса. Этого достаточно, чтобы SWIG рассматривал его как нечто большее, чем просто указатель. Вполне разумно предложить частичные определения SWIG 1 только тех частей struct (или class в C ++), которые вас интересуют - в этом случае звучит так, будто в вашем настоящем ничего нет определение struct example, которое вас волнует.

1 Существуют некоторые проблемы с типами C ++, которые являются абстрактными или не имеют конструктора по умолчанию.

...