2009-04-11 31 views
6

Tôi muốn tạo một ứng dụng iPhone, nhưng tôi đang lên kế hoạch tạo khung công tác trong C++. Có thể sử dụng những thứ như các mẫu trong Objective-C++ hay không. Tôi đoán câu hỏi là, tôi có thể sử dụng tăng không?Bao nhiêu C++ được hỗ trợ trong Objective-C++

+0

Điều này có thể không hữu ích như một câu trả lời nhưng nếu bạn đã biết C++, việc chọn Objective-C sẽ rất dễ dàng. Trừ khi tất nhiên bạn đang chuyển một ứng dụng thì tôi hiểu câu hỏi nhiều hơn. – Sean

+0

Có thể sử dụng C++ khi bạn cần hiệu suất rất cao, như trong một công cụ trò chơi. –

Trả lời

10

Tất cả C++ được hỗ trợ trong Mục tiêu C++. Nó sẽ có thể sử dụng tăng, nhưng bạn có thể phải cổng một số điều nền tảng phụ thuộc.

+2

Tôi đã sử dụng tăng mà không có bất kỳ thay đổi nào. Nó hoạt động ngay bên ngoài hộp. –

+1

Các thư viện tăng cường chính sẽ hoạt động nhưng một số thư viện liên quan đến IO có thể sẽ không hoạt động. – Zifre

+1

Zifre: Đúng là bạn cần phải làm một số công việc với những người đó. –

4

Mục tiêu C++ là bộ siêu của C++. Tất cả mọi thứ mà bạn có thể làm trong C/C++ có thể được thực hiện trong Obj-C++. Phần "Mục tiêu" chứa trong số những thứ khác, một hệ thống nhắn tin Smalltalk-esque và các bổ sung khác cho C++.

4

Cần phải chỉ ra rằng bạn không thể chỉ làm mọi thứ mà bạn có thể làm trong C++ trong Objective-C++. Ví dụ, bạn không thể gọi các hàm ảo trên các đối tượng C++ từ một lớp Objective-C. Một khi bạn gọi vào một chức năng C/C++ bạn có thể làm bất cứ điều gì bạn muốn mặc dù.

+0

Tôi không tin điều này là chính xác. Bạn có thể gọi các phương thức ảo C++ từ bên trong mã Objective-C++. –

+0

http://tinyurl.com/yfrxwg9 Các quốc gia: "Mục tiêu-C++ tương tự cố gắng để cho phép các cá thể lớp C++ hoạt động như các biến mẫu. Điều này có thể miễn là lớp C++ được đề cập (cùng với tất cả superclasses) không có bất kỳ hàm thành viên ảo nào được xác định. Nếu có bất kỳ hàm thành viên ảo nào, lớp C++ có thể không hoạt động như một biến đối tượng Objective-C. " Nó xuất hiện trong các phiên bản mới hơn của hệ điều hành mà đây không phải là vấn đề, nhưng tôi nghĩ nó là trên hệ điều hành iPHONE. –

2

Đối tượng C++ trong Mục tiêu C sẽ KHÔNG nhất thiết phải hoạt động giống như trong C++. Ví dụ: các hàm tạo và hàm hủy không tự động được gọi và (tôi nghĩ) bạn không thể triển khai các phương thức ảo ...

13

Có thể sử dụng những thứ như mẫu trong Objective-C++.

Có, nhưng bạn cần phải quan tâm cách bạn kết hợp các loại và giao diện giữa các lớp C++ thuần túy và mã Mục tiêu-C++. Hãy ghi nhớ ranh giới giữa các lớp, nơi bạn cần chuyển đổi các loại như std::string thành NSString, v.v.

Ví dụ: bạn có thể triển khai công cụ trò chơi lõi trong C++ thuần túy và chỉ triển khai bộ điều khiển và mã GUI trong Objective-C++. Sau đó, mã Obj-C++ là keo giữa công cụ C++ thuần túy và Cocoa.

Tôi đoán câu hỏi là, tôi có thể sử dụng tăng không?

Với hệ điều hành iPhone là một tập hợp con của OS X nhưng vẫn đảm bảo một lớp POSIX đầy đủ, hầu hết các thư viện Boost nên chỉ làm việc tốt. Nó cũng giống như viết mã Darwin.

Có một số hạn chế trong Objective-C++ phải nhận thức được (lấy trực tiếp từ Objective-C 2.0 Reference Guide):

  • bạn không thể sử dụng cú pháp Objective-C để gọi một đối tượng C++
  • bạn không thể thêm các hàm tạo hoặc hàm hủy đối với đối tượng Objective-C
  • bạn không thể sử dụng các từ khóa này và tự thay thế cho nhau
  • cấu trúc phân cấp lớp riêng biệt; một lớp C++ không thể kế thừa từ một lớp Objective-C, và một lớp Objective-C không thể kế thừa từ một lớp C++
  • một ngoại lệ được ném vào mã Objective-C không thể bị bắt gặp trong mã C++ và ngược lại, một ngoại lệ được ném vào C++ mã không thể bị bắt trong mã Objective-C.
+1

Nếu bạn đang đi để downvote một câu trả lời, ít nhất bạn có thể làm là nhà nước lý do tại sao. Câu trả lời được chấp nhận (có 9 phiếu) thay vì quá đơn giản nói rằng tất cả các tính năng của C++ đều có sẵn. Câu trả lời này cho biết có đủ điều kiện, và trích dẫn trực tiếp từ tài liệu tham khảo ngôn ngữ giải thích các hạn chế, và nó được downvoted. Nó hoạt động như thế nào? – gavinb

+0

Giới hạn # 2 nghe như phương pháp chung C++ có thể được thêm vào lớp Objective-C. Nhưng thật khó tin rằng việc thêm phương thức C++ vào lớp Objective-C là có thể. Bạn có thể giải thích thêm về điều này không? Vì liên kết bị hỏng nên tôi không thể kiểm tra thêm. – Eonil

+1

Thật không may tôi không thể tìm thấy một tài liệu tương đương để thay thế ở trên. Tôi đã gửi một ghi chú đến nhóm tài liệu ADC yêu cầu nó được khôi phục. Điểm # 2 đơn giản có nghĩa là một lớp ObjC trong mô-đun '.mm' vẫn có cùng phương thức' init' và 'dealloc' để quản lý vòng đời; bạn không thể kết hợp các cách tiếp cận ObjC và C++ trong cùng một lớp. Bạn không thể thêm phương thức C++ vào và lớp ObjC, nhưng bạn có thể gọi giữa hai phương thức trong một .'mm'. Tôi hy vọng điều này làm rõ những điều trên. – gavinb

1

Tăng cường hữu ích nhưng nó cũng là chi phí lớn để thêm vào dự án.

Đảm bảo bạn thực sự cần nó trước khi bạn thêm nó.

Để được hỗ trợ Regex: RegexLite.

Đối với mọi thứ khác: Ca cao.

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