Зачем оборачивать библиотеку C ++ через интерфейс C, используя SWIG?

0

SWIG-новичок изучает возможность обертывания большой библиотеки C++ в основном для доступа Python. Говоря с разработчиками, работающими над C++, вы предложили написать слой взаимодействия C, который затем завернут в SWIG.

Два возможных варианта:

   Base|  Interop  | Scripting Access

============================================

1) C++ |    SWIG   | Supported Languages

2) C++ | C | SWIG  | Supported Languages.

Добавляет ли # 2 некоторые функциональные возможности или стабильность, которых я не хватает? Он выглядит как слой сложной сложности. Может ли кто-нибудь предположить, почему С-слой может быть лучшим интерфейсом для упаковки в SWIG? (В общих чертах, поскольку вы не видели библиотеку и т.д.),

  • 1
    Имейте в виду, что взаимно-однозначное отображение интерфейсов между различными языками невозможно - например, передача массивов решается по-разному в C, (идиоматических) C ++ и Python. Ограниченные возможности сопряжения C уменьшают вероятность возникновения проблем. Стоимость состоит в том, что отключение интерфейса помещается в слой оболочки. Альтернативой может быть разработка интерфейса C ++ без наворотов (таких как множественное виртуальное наследование или перегруженные операторы). Кроме того, если у вас есть чистый интерфейс C, вы также можете загрузить его как Lib в Python напрямую,
  • 0
    @Dietrich Спасибо за информацию, и это полностью согласуется с тем, что я видел в разделе документации SWIG «комментарии по упаковке c ++». Если я правильно понимаю - если сложность C ++ достаточно низкая, прямой интерфейс не является проблемой? Полностью согласен re: C lib. Я использую это через Cython широко.
Показать ещё 1 комментарий
Теги:
swig
wrapper

2 ответа

2

SWIG очень эффективен и устранит многие трудоемкие шаблоны, которые вам придется писать иначе. Даже с boost :: python существует такой шаблонный код, хотя он намного меньше, чем все с нуля. Хорошая вещь с SWIG заключается в том, что она также упрощает интеграцию с дополнительными языками. Например, у меня была библиотека C++, которую я показывал на С#, поэтому я мог построить графический интерфейс в С#/WPF и с теми же входными файлами SWIG, которые были открыты для Lua, чтобы графический интерфейс мог быть написан с помощью слоя C++, Это было потрясающе!

О слое C вашего варианта # 2 я не вижу преимущества, если вы хотите интегрироваться с языком, который не поддерживает C++, но я не знаю такого языка (SWIG поддерживает около 20 и Я знаю только 4, поэтому, возможно, у одного из других есть такое ограничение). SWIG очень способен и может фактически обернуть довольно сложные интерфейсы. С помощью SWIG вы можете полностью изменить API, если хотите использовать директивы% inline и% extend. Я не могу думать о причине, что потребуется слой С.

0

Посмотрите на Boost Python, который работает с C++ напрямую.

  • 0
    Спасибо за внимание. Целью этого исследования является доступ к ряду языков сценариев - основное внимание уделяется Python, но также важен доступ к PHP. Я возьму пик на повышение питона.
  • 3
    Но это не отвечает на вопрос ОП о SWIG ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню