2012-01-31 27 views
5

¿Cuánta integración tienen C++ y Objective C en Objective C++? Me doy cuenta de que Objective C++ compila el código C++ y Objective C, pero ¿los idiomas realmente interactúan entre sí?Uso de C++ en Objective C++?

Por ejemplo, ¿puedo crear una plantilla de un objeto de Objective C? ¿Qué le parece heredar una clase Objective C de una clase C++?

Lo que básicamente intento preguntar es ¿se mezclan los idiomas o simplemente se compilan juntos en el mismo archivo? ¿En qué medida?

+0

Lo tiene al revés. Para un archivo .mm, un compilador de C++ compila el código Objective-C. Para un archivo .m, se usa un compilador de C en su lugar. La combinación de las jerarquías de clase C++ y Objective-C no es "normalmente" posible (aunque estoy seguro de que hay trucos), pero puedes incrustar una instancia de clase en la otra. –

Respuesta

2

Bueno, es bastante común usar Objective-C++ para crear aplicaciones. Puede ajustar Objective-C alrededor del código C++ pero no puede compartir objetos. Por ejemplo, no puede crear un objeto NSString en Objective-C e intentar llamar al método hasSuffix: de C++ y viceversa. Entonces, para compartir contenido entre esos dos necesitas usar tipos de C como structs, chars, ints, etc. Es porque los objetos de Objective-C solo se pueden usar en el entorno de tiempo de ejecución de Objective-C y los objetos de C++ solo se pueden usar en el entorno de ejecución de C++ . Entonces, lo único que ambos comparten y pueden comunicarse es C.

Tal vez un pequeño ejemplo le mostrará cómo puede interactuar entre estos dos.

NSString * objcStr = [[NSString alloc] initWithString:@"Hello World!"]; 
std::string cppStr ([objcStr UTF8String]); 
std::cout << cppStr; 
2

Tener un vistazo a la sección de guía de lenguaje Objective-C en Objective-C++ y/o la Wikipedia article.

Para responder a sus preguntas específicas, sí, los idiomas pueden "interactuar". Sí, puede crear una plantilla de un objeto Objective-C (id es solo un puntero) pero no espera usar RAII con objetos Objective-C. No, no puede derivar una clase Objective-C de una clase C++ o una clase C++ de una clase Objective-C.