Вызов Boost из Ruby через SWIG - PullRequest
3 голосов
/ 15 ноября 2010

Предположим, я хочу вызвать одну или несколько функций библиотеки повышения из кода Ruby. Есть много примеров, когда я хотел бы сделать это, но в последнее время я хочу использовать библиотеку Boost Graph для эффективной обработки графиков. Я думаю, что наиболее часто предлагаемый способ сделать это - использовать SWIG. Кто-нибудь прошел и сгенерировал обертки SWIG для библиотеки Boost? На самом деле это лучший способ взаимодействия с Boost? К каким частям Boost нельзя получить доступ через SWIG, поскольку для их работы требуются неподдерживаемые функции C ++?

1 Ответ

0 голосов
/ 16 ноября 2010

Не могу сказать, что специально сгенерировал оболочки для библиотек Boost, но я сделал это для своих шаблонных классов.

Это вполне выполнимо, если учесть, что SWIG обернет определенные экземпляры шаблона, используя директиву %template.

Как указано в документации, ссылки на которую приведены выше:

[...] пустой шаблон C ++ не определяет какой-либо выполняемый объектный код, для которого SWIG может обычно создавать оболочку,Поэтому, чтобы обернуть шаблон, вам нужно предоставить SWIG информацию о конкретном создании экземпляра шаблона (например, vector<int>, array<double> и т. Д.).Во-вторых, имя экземпляра, такое как vector<int>, обычно не является допустимым именем идентификатора в большинстве целевых языков.Таким образом, вам нужно дать экземпляру шаблона более подходящее имя, например intvector при создании оболочки.

С директивой ваш intvector будет выглядеть примерно так:

%template(intvector) vector<int>;
...