2012-12-11 2 views
2

Objective-C 클래스가 C++ 인터페이스 유형의 인스턴스 변수를 가질 수 있습니까?Objective-C에서 C++ 인터페이스를 사용할 수 있습니까?

내가 엑스 코드에서 C++ 클래스의 벌금을 선언 할 수 있습니다

는과 같이 (이 컴파일) :

interface class MyClass { 
    void MyMethod(); 
} 

내가 얻을 :

class MyClass { 
    void MyMethod(); 
} 

하지만이 같은 인터페이스를 선언 할 때 경우 컴파일 중 오류 : Unknown type name 'interface'

아직 ObjC 클래스에 넣지 않으려 고했지만 컴파일되지 않았습니다. C++ 인터페이스를 사용하고 있습니까?

+2

요즘 C++을 많이 해본 적이 없지만 언제부터 C++에 인터페이스가 있습니까? –

+0

일반적으로 Microsoft 버전 만 사용했기 때문에 인터페이스가 있다고 생각했습니다. – Curyous

답변

2

interface 키워드는 언어에 대한 마이크로 소프트의 확장; 표준 C++에는 존재하지 않습니다. 그것이 당신이 겪고있는 문제입니다. 비 Microsoft 컴파일러로 컴파일 된 C++ 프로그램에서는 사용할 수 없으므로 Microsoft가 Objective-C 컴파일러를 생성하지 않는다는 점을 감안할 때 Objective-C에서는 사용할 수 없습니다.

클래스 또는 구조체가 동일한 용도로 사용될 수 있습니다. AFAIK 인터페이스는 몇 가지 추가 제약 조건을 부과하는 가상 클래스입니다. 따라서 인터페이스는 직접 따라야합니다.

2

예 가능합니다. Objective-C++라고 불립니다.

.mm 파일 확장자를 사용하여 구현 파일의 이름을 지정하면 C++에서 수행 할 수있는 모든 작업을 수행 할 수 있습니다.

그러나 할 수없는 일 중 하나는 C++ 클래스를 Objective-C++ 클래스로 서브 클래 싱하는 것입니다. 대신 캡슐화를 사용

MyObjCppClass.h :

#import "MyCppClass.h" 

@interface MyObjCppClass : NSObject 
{ 
    MyCppClass *_myCppClass; 
} 

@end 

MyObjCppClass.mm :

#import "MyObjCppClass.h" 

@implemenation MyObjCppClass 

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     _myCppClass = new MyCppClass; 
     _myCppClass->doThing(); 
    } 
    return self; 
} 

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

@end 
+0

Objective-C++ 객체는 C++와 같은 방법으로 생성자를 가지지 않으므로 자동 저장 기간 객체를 멤버로 사용할 수는 없지만 동적 저장 기간 객체를 사용할 수 있습니다 (즉, 새/삭제를 사용해야 함) (당신이 보여준대로). –

+0

@ LokiAstari 동의 함. – trojanfoe

+0

@LokiAstari : 확실합니까? AFAIK C++ 객체는 기본 생성자로 만들어야합니다. – Chuck

관련 문제