Tôi cần phải trộn Objective-C và C++. Tôi muốn ẩn tất cả các công cụ C++ bên trong một lớp và giữ tất cả các đối tượng khác đồng bằng Objective-C. Vấn đề là tôi muốn có một số lớp C++ như các biến mẫu. Điều này có nghĩa là chúng phải được đề cập trong tệp tiêu đề, được bao gồm bởi các lớp khác và C++ bắt đầu lan rộng đến toàn bộ ứng dụng. Giải pháp tốt nhất mà tôi có thể thực hiện cho đến thời điểm này giống như sau:Các lớp C++ như các biến mẫu của một lớp Objective-C
#ifdef __cplusplus
#import "cppheader.h"
#endif
@interface Foo : NSObject
{
id regularObjectiveCProperty;
#ifdef __cplusplus
CPPClass cppStuff;
#endif
}
@end
Tác phẩm này. Các tập tin thực hiện có một mở rộng mm
, do đó nó được biên dịch như Objective-C trộn với C++, các #ifdef
mở khóa các công cụ C++ và có chúng tôi đi. Khi một số khác, hoàn toàn Objective-C lớp nhập khẩu tiêu đề, các công cụ C++ là ẩn và lớp học không thấy bất cứ điều gì đặc biệt. Điều này trông giống như một hack, là có một giải pháp tốt hơn?
Đó là cơ bản những gì tôi đã đưa ra khi tôi đã có cùng một vấn đề. Nhưng chú ý đến ifdef của bạn: bạn phải chèn padding cho nhánh non-cpp. Nếu không trình biên dịch sẽ không biết kích thước của các đối tượng Foo của bạn. Mặc dù điều này có thể không phá vỡ các bản dựng var instance không mong manh, nhưng nó chắc chắn là một vấn đề cho các mục tiêu kiểu cũ. –
Tôi đã sao chép phương pháp bạn đã nêu ở trên. Dường như khá tốt đẹp và dễ dàng, nhưng sau đó nó gây ra một số vấn đề tham nhũng bộ nhớ điên: http://stackoverflow.com/questions/2458652/objective-c-insanity-simple-assignement-to-a-single-float-variable-results – morgancodes