2012-01-31 41 views
5

Bao nhiêu tích hợp làm C++ và Objective C có trong Objective C++? Tôi nhận ra rằng Objective C++ biên dịch cả mã C++ và Objective C, nhưng các ngôn ngữ có thực sự tương tác với nhau không?Sử dụng C++ trong mục tiêu C++?

Ví dụ: tôi có thể tạo mẫu của đối tượng C mục tiêu không? Làm thế nào về kế thừa một lớp Objective C từ một lớp C++?

Những gì tôi về cơ bản cố gắng hỏi là làm các ngôn ngữ kết hợp hoặc họ chỉ đơn giản là biên dịch với nhau trong cùng một tệp? Bao nhiêu?

+0

Bạn có loại ngược. Đối với tệp .mm, trình biên dịch C++ biên dịch mã Objective-C. Đối với một tập tin .m một trình biên dịch C được sử dụng để thay thế. Việc trộn các phân cấp lớp C++ và Objective-C không phải là "bình thường" (mặc dù tôi chắc chắn có các thủ thuật), nhưng bạn có thể nhúng một cá thể lớp trong lớp kia. –

Trả lời

2

Cũng khá phổ biến khi sử dụng Objective-C++ để tạo ứng dụng. Bạn có thể bọc Objective-C xung quanh mã C++ nhưng bạn không thể chia sẻ các đối tượng. Ví dụ bạn không thể tạo một đối tượng NSString trong Objective-C và cố gắng gọi phương thức hasSuffix: từ C++ và ngược lại. Vì vậy, để chia sẻ nội dung giữa hai thứ đó, bạn cần sử dụng các kiểu C như struct, chars, ints, vv. Đó là vì các đối tượng Objective-C chỉ có thể sử dụng trong môi trường runtime Objective-C và các đối tượng C++ chỉ có thể sử dụng được trong môi trường runtime C++ . Vì vậy, điều duy nhất mà cả hai đều chia sẻ và có thể giao tiếp thông qua là C.

Có thể một ví dụ nhỏ sẽ cho bạn thấy cách bạn có thể tương tác giữa hai điều này.

NSString * objcStr = [[NSString alloc] initWithString:@"Hello World!"]; 
std::string cppStr ([objcStr UTF8String]); 
std::cout << cppStr; 
1

Bạn có thể gọi mã C++ từ bên trong Objective-C và ngược lại với một số thông báo trước. Xem How well is Objective-C++ supported? để biết thêm thông tin

2

Xem phần hướng dẫn ngôn ngữ mục tiêu-C trên Mục tiêu-C++ và/hoặc Wikipedia article.

Để trả lời các câu hỏi cụ thể của bạn, có các ngôn ngữ có thể "tương tác". Có, bạn có thể tạo một mẫu của đối tượng Objective-C (id chỉ là một con trỏ) nhưng không mong đợi sử dụng RAII với các đối tượng Objective-C. Không, bạn không thể lấy được một lớp Objective-C từ một lớp C++ hoặc một lớp C++ từ một lớp Objective-C.