2009-05-05 26 views
5

Tôi muốn sử dụng một số bộ sưu tập C++ STL trong ứng dụng iPhone Objective-C của mình. Rõ ràng điều này là có thể bằng cách cho các tập tin phần mở rộng ".mm". Một số điều kỳ quặc/bất ngờ liên quan đến điều này là gì?Điều gì làm Quirks/ngạc nhiên khi sử dụng các tệp .mm trong Objective-C?

Tôi muốn sử dụng các vùng chứa cơ bản mà tôi quen thuộc (vector, hàng đợi, bộ, ...)

Chúc mừng!

Trả lời

7

Xem Using C++ With Objective-C để biết danh sách chi tiết về những gì bạn có thể và không thể làm. Bạn có thể làm hầu hết mọi thứ mà bạn mong đợi. Bạn không thể làm những thứ như có một lớp C++ kế thừa từ một lớp Objective-C hoặc ngược lại, bạn không thể kết hợp các ngoại lệ C++ với các ngoại lệ Objective-C và C++ giới thiệu một số từ khóa mới không có trong Objective-C.

+0

Apple quá của nó f ** k'd lên liên kết. Bây giờ nó sẽ đưa bạn đến 'Ngôn ngữ lập trình mục tiêu-C'. Chỉ có 1 lần truy cập khi tìm kiếm C++ (trong trường hợp đó là một chủ đề phụ). Tìm kiếm trang web cho tiêu đề ('Sử dụng C++ với mục tiêu-C') trả về 0 lần truy cập. Yeah Apple! – jww

+2

@noloader: Vâng, thật không may. Bài viết đó vẫn có thể được tìm thấy [trên archive.org] (http://replay.web.archive.org/20090423073703/http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html). Có vẻ như Apple vừa xóa hoàn toàn chương đó (cũng như chương trên Tin nhắn từ xa) từ tài liệu "Ngôn ngữ lập trình C Mục tiêu 2.0". –

+0

cảm ơn. Tôi đã thử máy rút tiền, và nó không có nó. – jww

2

Các tệp sẽ được biên dịch bằng trình biên dịch Objective-C++, vì vậy mọi thứ sẽ hoạt động giống g ++ hơn gcc, nhưng vì đó là những gì bạn muốn, có lẽ không được tính là bất ngờ. Từ phía Objective-C, tôi không biết về bất kỳ gotchas nào, và tôi đã làm việc trên một số dự án lớn đã sử dụng đáng kể Objective-C++. Chỉ cần nhớ rằng các từ dành riêng cho Objective-C cũng được bảo lưu trong Objective-C++, vì vậy đôi khi bạn có thể gặp sự cố với thư viện C++ của bên thứ ba (ví dụ: nếu chúng sử dụng "id" làm tham số trong giao diện công khai).

1

Bạn sẽ ngạc nhiên về hiệu quả hoạt động của nó. Tôi đã không thực sự nhận được vào bất kỳ vấn đề intermixing Obj-C và C + + trong một tập tin mm.

4

Quirk chính của Objective-C++ là nếu bạn không chuyển -fobjc-call-cxx-cdtors sang g ++, nó sẽ không gọi hàm tạo và hàm hủy của các biến mẫu C++ trong các đối tượng ObjC. Vì vậy, hãy nhớ bật tùy chọn đó và bạn sẽ tốt.

+0

"Trên Mac OS X 10.4 trở lên, nếu bạn đặt cờ trình biên dịch fobjc-call-cxx-cdtors, bạn có thể sử dụng các cá thể của các lớp C++ có chứa các hàm ảo và các hàm tạo không đối số do người dùng định nghĩa không xác định và các trình phá hủy làm biến mẫu. Cờ trình biên dịch fobjc-call-cxx-cdtors được thiết lập theo mặc định trong gcc-4.2.) "- doc được đề cập bởi adam. – chrish

+0

Bây giờ tôi hiểu lý do tại sao các nhà xây dựng/destructors của tôi đã được gọi mà không có tùy chọn này được thiết lập trong dự án khi sử dụng gcc-4.2 ;-) –

Các vấn đề liên quan