Tôi bắt đầu làm việc trên một dự án Objective-C++, cảm nhận cách tổng hợp hai ngôn ngữ cảm thấy trước khi tôi thực hiện bất kỳ thiết kế hạng nặng nào. Tôi rất hấp dẫn bởi cách tính toán tham chiếu tự động đã được tích hợp với C++: chúng tôi nhận được tương đương với con trỏ thông minh cho NSObjects
xử lý lưu giữ/giải phóng chính xác trong các thùng chứa STL (xem bài viết của David Chisnall tại http://www.informit.com/articles/article.aspx?p=1745876&seqNum=3).Làm thế nào để sử dụng NSString làm khóa trong Objective-C++ std :: map
Tôi muốn sử dụng bản đồ STL làm ánh xạ an toàn từ NSStrings
đến giá trị C++. Tôi có thể tuyên bố ánh xạ là
std::map<NSString*, MyType> mapping
Với ARC, ánh xạ này xử lý việc quản lý bộ nhớ đúng cách. Nhưng nó không tuân theo NSString
ngữ nghĩa giá trị đúng cách, bởi vì nó sử dụng so sánh con trỏ thay vì -[NSString compare:]
.
Cách tốt nhất để lấy bản đồ STL để sử dụng so sánh chuỗi thay vì so sánh con trỏ là gì?
Tôi có nên thử chuyên std::less<NSString*>
không?
Tôi có nên khai báo một bộ so sánh rõ ràng như std::map<NSString*, MyType, MyCompare>
không?
Tôi có nên bọc các phím NSString*
trong con trỏ thông minh triển khai operator<
không?
làm thế nào để bạn xác định tốt nhất? bộ nhớ tốc độ kết quả mong muốn là gì? – madmik3
Thú vị. Tôi không biết con trỏ objc sẽ hoạt động dễ dàng như thế nào với ARC. Nhìn vào bài viết của Chisnall, bạn sẽ phải thêm __weak hoặc __strong vào bản khai báo của bản đồ để nó hoạt động. Nếu không, chúng là POD và nó sẽ không hoạt động. (Tôi không có câu trả lời cho vấn đề so sánh kể từ khi tôi làm điều đó hiếm khi và quên mật khẩu. Tôi sẽ thử theo thứ tự bạn đã cung cấp.) – smparkes
Tôi nghĩ rằng nếu con trỏ mạnh mẽ, bạn không cần phải đánh dấu chúng, chỉ khi họ yếu đuối. Dù sao, tôi sẽ đi với một so sánh rõ ràng. – bames53