Tôi có một ứng dụng C++ nhỏ mà tôi đã nhập các lớp Objective-C. Nó hoạt động như các tệp Objective-C++, .mm, nhưng bất kỳ tệp C++ nào bao gồm một tiêu đề có thể kết thúc bao gồm một số tiêu đề Objective-C phải được đổi tên thành phần mở rộng .mm cho các trình điều khiển GCC thích hợp.Tôi có thể tách các hàm và lớp chính của C++ khỏi các thường trình Objective-C và/hoặc C khi biên dịch và liên kết không?
Có cách nào để viết một trình bao bọc C++ thuần túy cho các lớp Objective-C hoặc tôi có thể tách các đối tượng Objective-C ra bằng cách nào đó và chỉ liên kết chúng một cách riêng biệt không? Có lẽ ngay cả khi các lớp Objective-C trở thành một thư viện nhỏ, tôi vẫn có thể liên kết lại một cách tĩnh tại thời gian biên dịch?
Vấn đề là mã này là nền tảng chéo và khó biên dịch hơn trên các hệ thống thường không sử dụng Objective-C (ví dụ: không phải máy Mac). Mặc dù các lệnh tiền xử lý hạn chế việc thực thi mã Objective-C trên Windows hoặc Linux, mã gốc vẫn có phần mở rộng .mm và GCC vẫn xử lý mã như Objective-C++.
vì vậy sau đó sẽ cấu trúc Wrapper :: Opaque bao gồm 'OBJCClass * name = [[OBJCClass alloc] init]' và Wrapper :: f() sẽ gọi [name f] nếu nó được liên kết như vậy? –
Có, bạn có thể cấp phát và khởi tạo lớp Objective-C chứa trong hoặc là hàm tạo 'Wrapper' hoặc' Opaque', bất cứ điều gì phù hợp với bạn và các phương thức lớp C++ sẽ chuyển tiếp các cuộc gọi đến lớp Objective-C của bạn. –