Necesito mezclar Objective-C y C++. Me gustaría esconder todo el material de C++ dentro de una clase y mantener todos los demás simples Objective-C. El problema es que quiero tener algunas clases de C++ como variables de instancia. Esto significa que deben mencionarse en el archivo de encabezado, que se incluye en otras clases y C++ comienza a extenderse a toda la aplicación. La mejor solución que he podido encontrar hasta ahora se parece a esto:Clases de C++ como variables de instancia de una clase Objective-C
#ifdef __cplusplus
#import "cppheader.h"
#endif
@interface Foo : NSObject
{
id regularObjectiveCProperty;
#ifdef __cplusplus
CPPClass cppStuff;
#endif
}
@end
Esto funciona. El archivo de implementación tiene una extensión mm
, por lo que se compila como Objective-C mezclado con C++, el #ifdef
desbloquea las cosas de C++ y ahí vamos. Cuando alguna otra clase puramente Objective-C importa el encabezado, las cosas de C++ están ocultas y la clase no ve nada especial. Esto parece un truco, ¿hay una mejor solución?
Es básicamente lo que he llegado con cuando tuve el mismo problema. Pero preste atención a su ifdef: tiene que insertar relleno para la rama que no sea de cpp. De lo contrario, el compilador no sabría el tamaño de sus objetos Foo. Si bien esto podría no afectar a las compilaciones de var de instancia no frágiles, definitivamente es un problema para los objetivos de estilo antiguo. –
Copié el enfoque que describió anteriormente. Parecía bastante agradable y fácil, pero luego causó algunos problemas de corrupción de memoria loca: http://stackoverflow.com/questions/2458652/objective-c-insanity-simple-assignement-to-a-single-float-variable-results – morgancodes