Trzeba użyć Objective-C++, gdy jesteś albo #include
/#import
ing lub bezpośrednio pisząc zarówno Objective-C i C++ kod w tym samym pliku. Zazwyczaj jest to oczywiste dzięki wyraźnemu kodowi; #include
s są często mniejsze i musisz uważać, aby uniknąć "przeciekania" jednego z języków do zbyt wielu innych. Twój przykład pliku nagłówkowego C++ jest jednoznaczny: możesz to zrobić tylko w Objective-C++. Zauważ, że jeśli twój Cplusplus
był typem struct
, możesz przekazać dalej - zadeklaruj go jako taki zamiast #import
w nagłówku C++.
Jeśli zrobisz to w nagłówku, to "zatruje" nagłówek, aby działał tylko w tym trybie. Musisz aktywnie tego uniknąć, bo cały twój projekt wkrótce skończy się tylko plikami .mm. I have documented some techniques in this article i previously, in this earlier article. W nowszych wersjach Objective-C możesz dodawać znaki iv do klas w rozszerzeniach kategorii. Oznacza to, że możesz zdefiniować C++ - wpisane ivars w pliku .mm, , a nie w nagłówku, co pozwala na pliki .m do #import
.
Na drugie pytanie (Proszę pytać tylko jedno pytanie na raz): typ id
jest zdefiniowana w pliku nagłówkowym objc.h
w kategoriach C i tym samym będą działać zarówno w Objective-C i C++. Podobnie, API środowiska wykonawczego Objective-C jest wyeksponowane pod względem funkcji C, które będą działać również z C++. Jeśli rzeczywiście chcesz wysyłać wiadomości i uzyskiwać dostęp do właściwości obiektów Objective-C z kanoniczną składnią kodu C++, musisz przełączyć ten plik na Objective-C++.
Co masz na myśli przez "podczas używania obiektu w pliku .m należącego do klasy C++"? – pmdj
@pmjordan: jeśli robię kompozycję obiektu C++ w interfejsie cel-c. #import "cplusplus.h” interfejs XYZ: NSObject { { Cplusplus * myObj; }} – tusharfloyd