У меня есть набор классов, написанных на С++. Какой лучший способ назвать их с Perl script? Спасибо.
Как я могу использовать класс С++ из Perl?
Ответ 1
Я не особенно люблю SWIG и предпочитаю сам писать код сопряжения. Perl поставляется с псевдоязыком под названием "XS" для взаимодействия с C или С++. К сожалению, для его использования вам нужно знать, по крайней мере, C, Perl, а затем узнать что-то об API-интерфейсе интерпретатора. Если вы уже знаете Perl и C хорошо, это не такой большой шаг. Взгляните на следующие основные документы по XS:
Кроме того, в Интернете есть много учебников и практических рекомендаций.
Теперь для взаимодействия с С++ с использованием 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 и, как правило, избегают пакетов, построенных вокруг него.