2012-01-13 2 views
2

C++ 파일에서 objective-c 클래스 메서드를 호출하는 데 문제가 있습니다. 예 : 내 .H에서C++에서 Objective-C 클래스 메서드 호출

: 내하는 .m에서

@interface MyClass : NSObject { 
} 
+ (void)myMethod:(NSString *)str; 

: 내 통화 당에서

+ (void) myMethod:(NSString *)str { ... } 

:

?? 

있기 때문에 당신은 MyMethod라는를 호출 할 수 있습니다 방법 클래스 인스턴스가 없습니까? 그 본질적으로 정적?

감사

+0

[C++ 방법에서 목표 - C의 메소드를 호출?]의 사용 가능한 복제 (https://stackoverflow.com/questions/1061005/calling-objective-c-method-from-c-method) –

답변

7

C++의 개체는 Objective-C의 개체와 호환되지 않습니다. 단순히 C++에서 Objective-C 메서드를 호출 할 수 없습니다.

그러나, 몇 가지 해결책이 있습니다

  1. 사용 목표 - C++. 당신의 .cpp.mm에, 당신은 당신의 C++ 코드에서 오브젝티브 C 구문을 사용할 수 있습니다 이름 바꾸기 : 오브젝티브 C 런타임 시스템에 [FlurryAnalytics myMethod: @"foo"];

  2. 를 사용하여 직접 호출. 나는 너에게 어떻게해야 할지를 말하지 않을 것이다. 왜냐하면 나는 정말로 네가해서는 안된다고 생각하기 때문이다. 사실 너는 그러고 싶지 않다.

  3. 일반 C 인터페이스를 작성하십시오. 즉, 일부 .m 파일에서 void myFunction(const char *str) { ... }을 정의하고 C++에서 호출하십시오.

+0

C++ 측에서 일부 전역 데이터를 생성하고 objective-c로 액세스하는 것이 가장 좋을 것 같습니다 실행 가능한 옵션. – Asheh

2

당신은 오히려 .CPP보다, 오브젝티브 C 메소드를 호출하는 .mm을 필요로 할 것입니다. 이 방법은 정적 아니지만

[MyClass myMethod:@"Some String"]; 

을 '은 본질적으로 정적이다'고 의견 당신이 C++로 정적 클래스 함수를 호출하는 방법과 유사 로직을 호출 것이라는 의미에서 정확하다는 것을 넘어 이 대답에 영향을 미치지 않는 여러 가지 이유에 대한 C++ 감각 - 컴파일 타임에는 해결되지 않고 클래스 (MyClass 메타 클래스) 내에서 작동합니다.

+0

나는 경우, 모든 .cpp 파일을 .mm으로 변환 할 수있는 옵션이 없습니다. 어떤 옵션이 있습니까? 나는 크로스 플랫폼 기능을 유지하려고 노력 중이므로 파일 유형이 바뀌지 않을 것입니다. – Asheh

+0

.cpp 파일은 이전 C++ 및 .mm 파일을 호출 할 수 있으므로 C++ 및 Objective-C가 포함되어 있으므로 플랫폼 특정 계층이 하나의 옵션이됩니다. 또는 Xcode에서 툴바의 '보기'라는 단어 위에있는 단추를 사용하여 오른쪽 패널을 열고 'ID 및 유형'으로 이동하여 파일 유형을 Objective-C++로 설정하십시오. 컴파일러에 관련 플래그를 보내야 파일 이름 별 기본 동작을 따르지 않아야합니다. – Tommy

+0

@Asheh : Xcode에서 파일 형식을 재정의 할 수 있습니다. 프로젝트 탐색기에서 .cpp 파일을 클릭하면 파일 관리자에 "파일 유형"이라는 드롭 다운 목록이 표시됩니다. 이 기본값을 Objective-C++ 소스로 변경하면 cpp 파일에 Objective C 구문이 포함될 수 있습니다 .mm – JeremyP

관련 문제