Подтвердить что ты не робот

Как я могу использовать класс С++ из Perl?

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

4b9b3361

Ответ 1

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

  • perlxstut (учебник XS)
  • perlxs (ссылка XS)
  • perlapi (API-интерфейс интерпретатора)

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

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

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

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

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

Ответ 2

Отметьте http://www.swig.org:

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

Ответ 3

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