Muszę połączyć Objective-C i C++. Chciałbym ukryć wszystkie rzeczy w C++ wewnątrz jednej klasy i zachować wszystkie inne proste Objective-C. Problem polega na tym, że chcę, aby niektóre klasy C++ były zmiennymi instancji. Oznacza to, że muszą być wymienione w pliku nagłówkowym, który jest dołączany przez inne klasy, a C++ zaczyna rozprzestrzeniać się na całą aplikację. Najlepsze rozwiązanie, jakie udało mi się znaleźć, wygląda tak:Klasy C++ jako zmienne instancji klasy Objective-C
#ifdef __cplusplus
#import "cppheader.h"
#endif
@interface Foo : NSObject
{
id regularObjectiveCProperty;
#ifdef __cplusplus
CPPClass cppStuff;
#endif
}
@end
To działa. Plik implementacji ma rozszerzenie mm
, więc zostanie skompilowany jako Objective-C zmieszany z C++, #ifdef
odblokowuje C++ i tam jedziemy. Kiedy inna klasa klasy Objective-C importuje nagłówek, rzeczy C++ są ukryte, a klasa nie widzi nic specjalnego. To wygląda na włamanie, czy jest lepsze rozwiązanie?
to w zasadzie to, co mam wymyślić, gdy miałem ten sam problem. Ale zwróć uwagę na swój ifdef: musisz wstawić dopełnienie dla gałęzi non-cpp. W przeciwnym razie kompilator nie znałby rozmiaru twoich obiektów Foo. Chociaż może to nie zaszkodzić nieusuwalnym wersjom kompilacji var, jest to z pewnością problem dla celów starego stylu. –
Skopiowałem podejście opisane powyżej. Wydawało się całkiem ładne i łatwe, ale potem spowodowało pewne szalone problemy z uszkodzeniem pamięci: http://stackoverflow.com/questions/2458652/objective-c-insanity-simple-assignement-to-a-single-float-variable-results – morgancodes