Je veux appeler et travailler avec des classes de l'objectif-C à partir d'un projet C ++ sur OS X. Il est temps de commencer à se déplacer vers tous les objectifs-C, mais nous devons le faire sur quelque temps. P>
Comment va-t-il accomplir cela? Quelqu'un peut-il perdre une lumière et donner un exemple? P>
4 Réponses :
Consultez cette question Calling Objective-C méthode de la méthode C ++? a> p>
Vous devrez avoir des classes de l'objectif-C pour envelopper le code et exposer avec une fonction C. P>
Objective-C ++ est un superset de C ++ , tout comme l'objectif-c est un superset de C. Il est pris en charge par les compilateurs de GCC et de Clang sur OS X et vous permet d'instancier et d'appeler des objets et des méthodes d'Objective-C à partir de C ++. Tant que vous masquez les importations d'en-tête Objective-C et les types dans la mise en place d'un module C ++, il ne infectera aucun de votre code "pur" C ++.
Donc, par exemple, la classe C ++ suivante renvoie les secondes depuis le 1er janvier. 1970: P> .mm code> est la valeur par défaut Extension pour Objective-C ++. Xcode fera automatiquement la bonne chose. P>
//MyClass.h
class MyClass
{
public:
double secondsSince1970();
};
//MyClass.mm
#include "MyClass.h"
#import <Foundation/Foundation.h>
double MyClass::secondsSince1970()
{
return [[NSDate date] timeIntervalSince1970];
}
//Client.cpp
...
MyClass c;
double seconds = c.secondsSince1970();
Renommez d'abord vos fichiers de * .m à * .mm afin que vous obteniez Objective-C ++
Je n'ai pas fatigué cela, c'est donc la spéculation (je le ferai ce soir): p>
comme tout objectif -C ++ objets (qui sont comptés en référence) sont contrôlés via des pointeurs afin que vous puissiez écrire un destructeur spécial pour un pointeur partagé. P>
// FuncFile.M // int func() { boost::shared_ptr<MyX, ObjCDestruct<MyX> > data([[MyX alloc] init]); [data.get() doAction1:@"HI"]; }
Si vous vouliez être extra-snazzzy, vous subglassez type_traits code> pour is_objc_obj et spécialisez-vous à ce sujet;)
Essayez-vous d'appeler des objets de fondation (non-UI) ou d'objets AppKit (UI)? Appelez-vous
nsaplicationMain () code> dans
principal () code> ou essayez-vous d'éviter cela?
Dupliqué possible de Calling Objective-C méthode de la méthode C ++?
Il existe une balise Objective-C ++ sur afin que vous puissiez vérifier également. Stackoverflow.com/questions/tagged/Objective-c++
@ROB Napier - Kit de fondation et d'application. Appels de fichier de fichiers et boîtes de dialogue pour ouvrir des fichiers, sauvegarder, alertes, etc.