Мне не особо нравится SWIG, и я предпочитаю писать код взаимодействия самостоятельно. Perl поставляется с неким псевдо-языком под названием «XS» для взаимодействия с C или C ++. К сожалению, чтобы использовать его, вам нужно знать хотя бы C, Perl, а затем узнать кое-что об API интерпретатора. Если вы уже хорошо знаете Perl и C, это не такой большой шаг. Посмотрите на следующие основные документы по XS:
- perlxstut (учебник по XS)
- perlxs (ссылка на XS)
- 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. Если это работает, это, вероятно, самое простое решение. Я сомневаюсь, что он может обрабатывать шаблоны.