2009-04-02 15 views
5

के लिए स्वत: कोड जनरेशन मैं मैक/आईफोन डेवलपर्स से एक नई परियोजना के बारे में राय मांग रहा हूं। विचार स्वयं को उद्देश्य सी से सी ++ से पुल उत्पन्न करने के लिए स्विग (www.swig.org) का उपयोग करके एक ओपन सोर्स पहल शुरू करना है ताकि कोई कोको/कोको स्पर्श से सी ++ अनुप्रयोगों तक पहुंच सके।उद्देश्य सी से सी ++ पुल

ऐप्पल उद्देश्य सी ++ के माध्यम से उद्देश्य सी और सी ++ मिश्रण के लिए बहुत अच्छा समर्थन प्रदान करता है लेकिन हाथ से उन पुलों को लिखना कठिन और बग प्रवण हो सकता है। यह प्रोजेक्ट क्या करना है, सी ++ पर ऑब्जेक्ट सी इंटरफेस और रैपर को स्वचालित रूप से उत्पन्न करने का एक तरीका प्रदान करना है ताकि किसी भी कोको या कोको टच एप्लिकेशन ऑब्जेक्ट उन्मुख उद्देश्य सी इंटरफ़ेस को नीचे ++ के साथ देख सकें।

मैं इस विचार पर किसी भी राय या सुझावों की सराहना करता हूं।

उत्तर

1

यह मुझे एक अच्छा पर्याप्त विचार के रूप में हमला करता है कि मुझे आश्चर्य होगा अगर ऐसा कुछ भी पहले से मौजूद नहीं है। दूसरी ओर, चूंकि आप सी ++ को सीधे संकलित कर सकते हैं, (देखें कि एक। एमएम एक्सटेंशन आपको क्या देता है) यह कुछ हद तक मामूली हो सकता है।

4

मुझे नहीं लगता कि यह आवश्यक है। उद्देश्य-सी ++ के साथ, आपको बिल्कुल पुल की आवश्यकता नहीं है। दिए गए सी ++ वर्ग को

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

आप उद्देश्य-सी ++ कोड में कहीं भी उस कक्षा का उपयोग कर सकते हैं। उदाहरण के लिए, एक विधि के भीतर:

- (void)myObjCMethod { 
    Foo myFoo; 

    myFoo.someMethod(); 

    //etc. 
} 

आप उदाहरण चर सेल्सियस तक ++ कक्षाएं बात हो सकती है, इसलिए मुझे नहीं लगता कि आप टेम्पलेट कर सकते हैं आप की तरह

@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(); 
} 

एक ऑब्जेक्टिव-सी वर्ग को परिभाषित कर सकता है एक उद्देश्य-सी विधि, लेकिन उद्देश्य-सी ++ में सी ++ टेम्पलेट इंस्टेंटेशन उचित गेम हैं। जैसे उद्देश्य-सी सी का सख्त सुपरसेट है, उद्देश्य-सी ++ सी ++ का सुपरसैट है, उद्देश्य-सी-स्टाइल कक्षाएं और संदेश गुजर रहा है।

यदि आप सी ++ कक्षा को "पुल" करना चाहते हैं, तो आपको सामान्य रूप से परेशानी होगी, क्योंकि एकाधिक विरासत और ऑपरेटर ओवरलोडिंग जैसी चीजें उद्देश्य-सी के ऑब्जेक्ट मॉडल में समर्थित नहीं हैं।