Создание объектно-ориентированного API на C с использованием SWIG - PullRequest
3 голосов
/ 11 февраля 2011

Я использую SWIG для создания оболочек для библиотеки C. Интерфейс библиотеки C имеет естественное отображение на объектно-ориентированный API (который я хотел бы представить на целевом языке), но прямое использование SWIG для создания оболочек создаст один объект на целевом языке со всеми интерфейсы библиотеки C.

Я вижу несколько вариантов:

  • Создайте интерфейс C ++ для библиотеки C, затем оберните C ++ с помощью SWIG
  • Создание пользовательских классов на каждом целевом языке, которые используют простой, не OO-вывод SWIG для внутреннего использования

Я бы предпочел пункт 2, но у меня такой вопрос: это нормально? Это привлекательно, потому что я хотел бы иметь полный контроль над интерфейсом на целевом языке с минимальной степенью зависимости от расширенных функций SWIG.

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

Я также предпочитаю вариант 2 («Создайте пользовательские классы на каждом целевом языке, которые используют простой, не OO-вывод SWIG внутри»).

Мои причины:

  1. Вы должны поддерживать "меньше кода".Сложная часть - это библиотека C + SWIG-обертки, поэтому лучше сохранить ее как можно меньше.Создание еще одного переноса в C ++ сильно усложнит эту часть.

  2. Обычно проще создавать классы интерфейса в Python (или Java?), Просто потому что он имеет более высокий уровень абстракции.

  3. Вы можете применить шаблон адаптера, который очень хорошо подходит для этого случая.http://en.wikipedia.org/wiki/Adapter_pattern

0 голосов
/ 12 февраля 2011

Вы смотрели на ctypes и / или cython ? оба варианта должны быть намного проще, чем использование SWIG; более того, ctypes находится в стандартной библиотеке и не потребует перекомпиляции при обновлении версии Python (и я думаю, что это будет работать и на разных платформах)

...