Как я могу использовать класс C ++ из Perl? - PullRequest
12 голосов
/ 01 июня 2009

У меня есть набор классов, написанных на C ++. Как лучше всего назвать их из сценария Perl? Спасибо.

Ответы [ 3 ]

14 голосов
/ 01 июня 2009

Мне не особо нравится SWIG, и я предпочитаю писать код взаимодействия самостоятельно. Perl поставляется с неким псевдо-языком под названием «XS» для взаимодействия с C или C ++. К сожалению, чтобы использовать его, вам нужно знать хотя бы C, Perl, а затем узнать кое-что об API интерпретатора. Если вы уже хорошо знаете Perl и C, это не такой большой шаг. Посмотрите на следующие основные документы по XS:

  1. perlxstut (учебник по XS)
  2. perlxs (ссылка на XS)
  3. perlapi (Интерпретатор API)

Кроме того, в Интернете есть множество учебных пособий и инструкций.

Теперь для взаимодействия с C ++ с использованием XS требуются некоторые дополнительные шаги. Поначалу это может быть немного неприятно, но, как только вы его получите, все станет на свои места. В этом отношении основная документация в лучшем случае редкая. Но еще не все потеряно. Маттиа Барбон (Mattia Barbon), создатель привязок wxWidgets для Perl, написал отличный инструмент «XS ++», который делает его практически мертвым простым (или таким же простым, как XS). Он включен в Wx, но мы работаем над его разделением. Эта работа в процессе. Вы можете найти код Mattia XS ++ и мою модифицированную версию на github.

За исключением выпуска автономного XS ++ для CPAN, я бы предложил научиться писать XS для C ++ из других ресурсов:

  • Давным-давно Джон Кейзер написал отличный учебник по XS и C ++ . Он также включает дополнительные ссылки на полезные инструменты и документацию.
  • Из этого руководства я узнал XS & C ++ и некоторые примеры, которые я нашел в CPAN. Я не помню, на что я тогда смотрел. Но теперь я могу указать на мою собственную работу в качестве (хорошего или плохого, я не знаю) примера: Math :: SymbolicX :: FastEvaluator .
  • Аналогично, запланированный дистрибутив XS ++ содержит полный (хотя и бессмысленный) пример использования XS ++ для взаимодействия с C ++ и Perl. Поскольку XS ++ переведен на обычный XS, вы можете использовать его для генерации примеров.

PS: есть также модуль Inline :: CPP. Если это работает, это, вероятно, самое простое решение. Я сомневаюсь, что он может обрабатывать шаблоны.

10 голосов
/ 01 июня 2009

Чек http://www.swig.org:

"SWIG - инструмент разработки программного обеспечения который соединяет программы, написанные на C и C ++ с различными высокоуровневыми языки программирования. SWIG используется с разными типами языков включая распространенные скриптовые языки такие как Perl, PHP, Python, Tcl и Рубин ".

7 голосов
/ 01 июня 2009

Я бы обычно выбрал XS, как tsee, но есть также Inline :: C (или Inline :: CPP в данном случае). Мне не нравится SWiG и я склонен избегать пакетов, построенных вокруг него.

...