Понимание повторений в учебном примере Swig - PullRequest
0 голосов
/ 13 декабря 2018

Я новичок в изучении глотка.Я заинтересован в вызове C ++ из Python на компьютере с Ubuntu.

Я только начал смотреть вступительное руководство здесь http://www.swig.org/tutorial.html

Рассмотрим файл интерфейса на этой странице example.iскопировано как ниже.

 /* example.i */
 %module example
 %{
 /* Put header files here or function declarations like below */
 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();
 %}

 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();

Почему содержимое между %{ %} повторяется во второй половине файла?Как указано в руководстве, http://www.swig.org/Doc3.0/SWIGDocumentation.html#Introduction_nn5

Блок% {%} обеспечивает место для вставки дополнительного кода, такого как заголовочные файлы C или дополнительные объявления C, в сгенерированную оболочку Cкод.

Но это не относится к точке повторения в примере.Чего мне не хватает?

1 Ответ

0 голосов
/ 13 декабря 2018

Код между %{ и %} дословно вставляется в сгенерированную оболочку SWIG и используется, чтобы предоставить коду оболочки доступ к перечисленным заголовкам или объявлениям.

Код вне этих маркеров указываетSWIG, чтобы создать оболочку для каждого из перечисленных объявлений (или целых заголовочных файлов).

Если вы пропустили extern int fact(int n); в первой части, оболочка будет скомпилирована и связана с источником или библиотекой, содержащейФункция не сможет получить доступ к функции, так как объявление extern будет отсутствовать.Если исключить из второй части, оболочка не будет сгенерирована для доступа к ней из языка сценариев.

Существует ярлык:

%inline %{
...
%}

, который инструктирует SWIG как вставлять, так изаверните декларации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...