2009-04-02 27 views
5

Tôi đang tìm kiếm ý kiến ​​từ các nhà phát triển Mac/iPhone về một dự án mới. Ý tưởng là để bắt đầu một sáng kiến ​​nguồn mở bằng cách sử dụng swig (www.swig.org) để tự động tạo cầu từ mục tiêu c đến C++ để người ta có thể truy cập các ứng dụng C++ từ cacao/ca cao.Tạo mã tự động cho mục tiêu C đến cầu C++

Apple cung cấp hỗ trợ rất tốt để trộn mục tiêu c và C++ thông qua mục tiêu C++ nhưng viết những cây này bằng tay có thể tẻ nhạt và dễ bị lỗi. Dự án này có ý định làm gì để cung cấp một cách tự động tạo các giao diện c và trình bao bọc mục tiêu trên C++ sao cho bất kỳ ứng dụng ca cao hoặc ứng dụng ca cao nào xảy ra để xem giao diện c mục tiêu hướng đối tượng với C++ bên dưới.

Tôi rất cảm kích mọi ý kiến ​​hoặc đề xuất về ý tưởng này.

Trả lời

1

Nó đánh tôi như là một ý tưởng đủ tốt mà tôi sẽ ngạc nhiên nếu một cái gì đó như nó không tồn tại. Mặt khác, vì bạn có thể biên dịch trực tiếp C++, (xem phần mở rộng .mm mang lại cho bạn) nó có thể hơi tầm thường.

4

Tôi không nghĩ điều này là cần thiết. Với Objective-C++, bạn không cần một cây cầu nào cả. Cho một lớp C++ được định nghĩa

class Foo { 
    public: 
    void someMethod(void); 
} 

bạn có thể sử dụng lớp đó ở bất kỳ đâu trong mã Objective-C++. Ví dụ, trong một phương pháp:

- (void)myObjCMethod { 
    Foo myFoo; 

    myFoo.someMethod(); 

    //etc. 
} 

Bạn có thể có các biến dụ trỏ đến C++ lớp học, do đó bạn có thể định nghĩa một lớp Objective-C như

@interface Bar : NSObject { 
    Foo *foo; 
} 

@property (assign) Foo * foo; 
@end 

@implementation 
@synthesize foo; 

- (void)dalloc { 
    delete foo; 
    [super dealloc]; 
} 

- (id)init { 
    if(self = [super init]) { 
    foo = new Foo(); 
    } 

    return self; 
} 

- (void)aMethod { 
    self.foo->barMethod(); 
} 

Tôi không nghĩ rằng bạn có thể template một phương pháp Objective-C, nhưng C++ mẫu instantiations trong Objective-C++ là trò chơi công bằng. Cũng giống như Objective-C là một superset nghiêm ngặt của C, Objective-C++ là một superset của C++, thêm các lớp Objective-C-style và thông điệp đi qua.

Nếu bạn muốn "nối" lớp C++, bạn sẽ gặp khó khăn nói chung, vì những thứ như thừa kế thừa và toán tử không được hỗ trợ trong mô hình đối tượng của Objective-C.