Je dois mélanger Objective-C et C++. Je voudrais cacher tous les trucs C++ dans une classe et garder tous les autres objectifs Objective-C. Le problème est que je veux avoir des classes C++ comme variables d'instance. Cela signifie qu'ils doivent être mentionnés dans le fichier d'en-tête, qui est inclus par d'autres classes et que C++ commence à s'étendre à l'ensemble de l'application. La meilleure solution que j'ai pu utiliser jusqu'à présent ressemble à ceci:Classes C++ comme variables d'instance d'une classe Objective-C
#ifdef __cplusplus
#import "cppheader.h"
#endif
@interface Foo : NSObject
{
id regularObjectiveCProperty;
#ifdef __cplusplus
CPPClass cppStuff;
#endif
}
@end
Cela fonctionne. Le fichier d'implémentation a une extension mm
, de sorte qu'il est compilé en Objective-C mélangé avec C++, le #ifdef
déverrouille le contenu C++ et nous y voilà. Quand une autre classe purement Objective-C importe l'en-tête, le contenu C++ est caché et la classe ne voit rien de spécial. Cela ressemble à un hack, y a-t-il une meilleure solution?
Il est fondamentalement ce que je suis venu avec quand j'eu le même problème. Mais faites attention à votre ifdef: vous devez insérer un padding pour la branche non-cpp. Sinon, le compilateur ne connaitrait pas la taille de vos objets Foo. Bien que cela ne vienne pas perturber les builds var d'instance non fragiles, c'est définitivement un problème pour les anciennes cibles de style. –
J'ai copié l'approche que vous avez décrite ci-dessus. Semblait assez agréable et facile, mais alors il a causé quelques problèmes de corruption de mémoire fou: http://stackoverflow.com/questions/2458652/objective-c-insanity-simple-assignement-to-a-single-float-variable-results – morgancodes