2009-04-02 3 views
5

새로운 프로젝트에 대한 Mac/iPhone 개발자의 의견을 모으고 있습니다. 아이디어는 swig (www.swig.org)를 사용하여 객관적인 c에서 C++로 자동으로 브릿지를 생성하여 코코아/코코아 터치에서 C++ 응용 프로그램에 액세스 할 수 있도록하는 오픈 소스 이니셔티브를 시작하는 것입니다.Objective C에서 C++ 로의 자동 코드 생성

Apple은 객관적인 C++를 객관적인 C++로 혼합하는 것에 대한 매우 훌륭한 지원을 제공하지만 그 교량을 직접 작성하는 것은 지루하고 버그가 발생하기 쉽습니다. 이 프로젝트가 의도하는 것은 C++에 대한 객관적인 c 인터페이스와 래퍼를 자동으로 생성하는 방법을 제공하여 모든 코코아 또는 코코아 터치 응용 프로그램이 C++과 함께 객체 지향 객관적 인터페이스를 보게됩니다.

이 아이디어에 대한 의견이나 제안에 매우 감사드립니다.

답변

1

그것은 이미 존재하지 않는다면 놀랄 것이라는 생각이 든다. 반면에, C++을 직접 컴파일 할 수 있기 때문에 (.mm 확장이 무엇을 제공하는지보세요) 다소 사소한 것일 수 있습니다.

4

나는 이것이 필요하다고 생각하지 않습니다. Objective-C++를 사용하면 브리지가 전혀 필요 없습니다. 주어진 C++ 클래스는 목표 - C++ 코드에서 어디 그 클래스를 사용할 수 있습니다

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

을 정의했다. 예를 들어, 메소드 내 :

- (void)myObjCMethod { 
    Foo myFoo; 

    myFoo.someMethod(); 

    //etc. 
} 

당신은 클래스 C++를 가리키는 인스턴스 변수를 가질 수 있습니다, 그래서 당신은 템플릿 수 있다고 생각하지 않습니다 당신이

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

같은 목표 - C 클래스를 정의 할 수 있습니다 Objective-C 방법이지만 Objective-C++의 C++ 템플릿 인스턴스화는 공정한 게임입니다. Objective-C가 C의 엄격한 상위 집합 인 것처럼 Objective-C++는 Objective-C 스타일 클래스와 메시지 전달을 추가하는 C++의 상위 집합입니다.

C++ 클래스를 "브리지"하려면 Objective-C의 객체 모델에서 다중 상속 및 연산자 오버로딩과 같은 것들이 지원되지 않으므로 일반적으로 문제가 발생합니다.