Tengo una pequeña aplicación C++ que importé clases Objective-C. Funciona como archivos Objective-C++, .mm, pero cualquier archivo C++ que incluya un encabezado que pueda incluir un encabezado Objective-C debe renombrarse a una extensión .mm para los controladores GCC adecuados.¿Puedo separar la función principal de C++ y las clases de las rutinas Objective-C y/o C en compilación y enlace?
¿Hay alguna manera de escribir un contenedor puramente C++ para clases Objective-C o puedo separar los objetos Objective-C de alguna manera y simplemente vincularlos por separado? Quizás incluso si las clases de Objective-C se convirtieran en una pequeña biblioteca, podría volver a enlazar estáticamente en tiempo de compilación.
El problema es que este código es multiplataforma y es más difícil de compilar en sistemas que normalmente no usan Objective-C (es decir, no Mac). Aunque los comandos del preprocesador restringen cualquier implementación del código Objective-C en Windows o Linux, el código original aún tiene extensiones .mm y GCC aún trata el código como Objective-C++.
entonces ¿struct Wrapper :: Opaque incluiría 'OBJCClass * name = [[OBJCClass alloc] init]' y Wrapper :: f() llamaría a [name f] si estuviera tan vinculado? –
Sí, podría asignar e inicializar la clase Objective-C contenida en el constructor 'Wrapper' o' Opaque', lo que más le convenga, y los métodos de la clase C++ reenviarían las llamadas a su clase Objective-C. –