Pour créer des fichiers d'en-tête qui peuvent être partagées entre obj-c et le code de cpp, vous pouvez utiliser le compilateur de macros prédéfinies pour faire quelque chose comme:
// A .h file defining a objc class and a paired cpp class
// The implementation for both the objective C class and CPP class
// MUST be in a paired .mm file
#pragma once
#ifdef __OBJC__
#import <CoreFoundation/CoreFoundation.h>
#else
#include <objc/objc.h>
#endif
#ifdef __OBJC__
@interface ObjectiveCClass :
...
typedef ObjectiveCClass* ObjectiveCClassRef;
#else
typedef id ObjectiveCClassRef;
#endif
#ifdef __cplusplus
class CPlusPlusClass {
ObjectiveCClassRef obj;
void doSomethind();
};
#endif
Je ne suis pas sûr à 100% sa Légal pour avoir ObjectiveCClassRef changer le type comme celui entre c/cpp et les constructions d'obj-c. Mais id
est un type compatible c/cpp défini dans les fichiers d'en-tête C comme capable de stocker un pointeur de classe C objectif et, lorsqu'il est utilisé dans les fichiers .m ou .mm, vous permet d'appeler directement l'objet.
Quand je l'ajoute #include "ObjectiveCClass.h" au C++ fichier je reçois des erreurs 9000, comme: attendu-id non qualifiée avant '-' jeton et Stray '@' dans le programme – user346443
En-tête Les fichiers qui vont être partagés entre les fichiers .cc/.cpp et/mm doivent être nettoyés. Vous ne pouvez utiliser aucune directive objective-Cs @ dans un tel fichier d'en-tête. –
Alors qu'est-ce qu'une classe objective-c doit ressembler donc je peux en avoir un membre dans une classe C++. Merci de votre aide. – user346443