2010-11-15 5 views
3

Supposons que je souhaite appeler une ou plusieurs fonctions de bibliothèque d'amplification à partir du code Ruby. Il y a beaucoup d'exemples de fois où je voudrais faire ceci, mais plus récemment je veux employer la bibliothèque de graphique de poussée pour le traitement efficace de graphique. Je pense que la façon la plus souvent suggérée de le faire est d'utiliser SWIG. Est-ce que quelqu'un a traversé et généré des wrappers SWIG pour la bibliothèque Boost? Est-ce en fait le meilleur moyen d'interopérer avec Boost? Quelles parties de Boost ne sont pas accessibles via SWIG car elles nécessitent des fonctionnalités C++ non supportées pour fonctionner?Appel Boost de Ruby via SWIG?

+0

Je pense aussi à accéder à la bibliothèque graphique Boost de Ruby. Avez-vous essayé? Si oui, il serait utile si vous pouvez me donner des informations à ce sujet. – sawa

+0

Où vous êtes-vous retrouvés avec ça? –

Répondre

0

Je ne peux pas dire que j'ai généré des wrappers pour les bibliothèques Boost spécifiquement, mais je l'ai fait pour mes propres classes modélisées.

Ceci est parfaitement faisable tant que vous gardez à l'esprit que SWIG encapsulera des instanciations de gabarit spécifiques en utilisant la directive %template.

Comme il est indiqué dans la documentation liée ci-dessus:

[...] un modèle C++ nu ne définit pas une sorte d'objet code exécutable pour lequel SWIG peut normalement créer une enveloppe. Par conséquent, pour envelopper un modèle, vous devez fournir des informations SWIG sur une instanciation de modèle particulière (par exemple, vector<int>, array<double>, etc.). Deuxièmement, un nom d'instanciation tel que vector<int> n'est généralement pas un nom d'identificateur valide dans la plupart des langues cibles. Ainsi, vous devrez donner à l'instanciation du modèle un nom plus approprié tel que intvector lors de la création d'un wrapper.

Avec la directive votre intvector ressemblerait à quelque chose comme ceci:

%template(intvector) vector<int>;