L'interaction avec des classes C++ de Swift

J'ai une importante bibliothèque de classes écrites en C++. Je suis en train de faire usage d'entre eux à travers un certain type de pont au sein de Swift plutôt que de les réécrire comme code Swift. La motivation principale est que le code C++ représente une bibliothèque de base qui est utilisé sur de multiples plateformes. Effectivement, je suis juste de créer rapidement une base de l'INTERFACE utilisateur pour permettre la fonctionnalité de base pour fonctionner sous OS X.

Il y a d'autres questions à se demander "Comment puis-je appeler une fonction C++ de Swift." C'est pas ma question. À pont à une fonction C++, le suivant fonctionne très bien:

Définir un en-tête de transition par le biais de "C"

#ifndef ImageReader_hpp
#define ImageReader_hpp

#ifdef __cplusplus
extern "C" {
#endif

    const char *hexdump(char *filename);
    const char *imageType(char *filename);

#ifdef __cplusplus
}
#endif

#endif /* ImageReader_hpp */

Code Swift peut maintenant appeler directement les fonctions de

let type = String.fromCString(imageType(filename))
let dump = String.fromCString(hexdump(filename))

Ma question est plus spécifique. Comment puis-je instancier et de manipuler un Classe C++ de l'intérieur Swift? Je n'arrive pas à trouver tout ce qui est publié sur ce.

  • J'ai personnellement eu recours à l'écriture de la plaine de l'Objectif-wrapper C++ fichiers qui exposent un Objectif-C classe qui reproduit tous les appels C++ et simplement les transmet à une instance de la classe C++. Dans mon cas, le nombre de classes C++ et des appels est petit, donc il n'est pas particulièrement intensif en main d'œuvre. Mais je vais retenir sur la promotion de ce titre de réponse, dans l'espoir que quelqu'un aura trouver quelque chose de mieux.
  • Eh bien, c'est quelque chose... nous allons attendre et voir (et l'espoir).
  • J'ai reçu une suggestion via IRC pour écrire un Swift classe wrapper qui maintient un vide pointeur vers le véritable objet C++ et expose les méthodes requises, qui sont, en effet, vient de passer à travers par l'intermédiaire de la C pont et le pointeur vers l'objet.
  • Une mise à jour de cette, Swift 3.0 est maintenant, et malgré les promesses, C++ interopérabilité est maintenant marqué comme "Hors de portée."