Mezclar código Objective-C y C ++
-
12-09-2019 - |
Pregunta
Tengo una aplicación Objetivo-C / C ++ que utiliza la funcionalidad que se proporciona por una biblioteca de C ++.
Una de las clases de la C ++ incluye una enumeración como esto:
class TheClass
{
public:
[...]
enum TheEnum
{
YES,
NO,
};
[...]
};
La inclusión (utilizando import -si que matters-) un archivo de cabecera con la declaración de la clase anterior en una Objective-C / C ++ archivo de origen (* .mm) hará que la compilación falle ya que el preprocesador sustituirá a "YES" el término "(BOOL) 1" (y del mismo modo "NO" por "(BOOL) 0").
¿Hay una manera de arreglar eso sin cambiar el nombre de los valores de la enumeración?
Solución
SÍ y NO son constantes predefinidas en Objective-C, declarada en la cabecera objc.h.
Usted debe ser capaz de prevenir el preprocesador para ampliar el "SÍ" y "NO" macro de. Esto se puede hacer a nivel local por #undef
fing ellos.
Sin embargo, técnicamente, si está utilizando una palabra clave lenguaje como un identificador, se puede esperar problemas. Usted no va a escribir una clase que contiene un miembro llamado MAX_PATH
, ¿verdad?
Otros consejos
El #import
sí importa - C ++ cabeceras en un fichero de Objective-C ++ deberá incluirse con #include
. Creo, aunque no estoy 100% seguro, que la elección de directiva include (#include
vs #import
) determina qué se utiliza preprocesador.
También podría revertir la declaración de las constantes en la enumeración, ya que por defecto, los miembros de una enumeración están asociados con números enteros a partir de 0.
Por los comentarios, estoy equivocado. Parece que vas a tener que volver a escribir la enumeración. Lo sentimos: (