2010-09-27 2 views
0

Я работаю над проектом, который просто нужно переписать, но на данный момент это не вариант.Доступ к переменной Object Object-C из функции C++

У меня есть функция C++, которая называется и делает всевозможные вещи. Мне нужно, чтобы он читал переменную из класса App Delegate.

Например, у меня есть:

@interface MyAppDelegate : NSObject <UIApplicationDelegate> 
{ 
    UIWindow *window; 
    MyViewController *viewController; 

int mToleranceLevel; 
} 

тогда у меня есть функция, которая должна получить доступ к mToleranceLevel:

bool FindExtrinsics(...) 
{ 
float maxError = mainDelegate.mMaxError; 
     ... 
} 

Проблема в том, что это была объявлена ​​как так:

@interface MyClass : UIViewController 
{ 
    ... 
} 

@properties ... 

bool FindExtrinsics(...); 

@end 

Итак, как бы получить значение из класса AppDelegate. Я знаю, как получить текущий делегат:

mainDelegate = (RedStripeARAppDelegate *)[[UIApplication sharedApplication] delegate]; 

Но как я могу использовать эту информацию, чтобы получить значение в моей функции C++. Есть ли способ сделать статическую переменную, чтобы я мог вызвать MyAppDelegate.mToleranceValue; ??

+0

AppDelegate * AD = ((AppDelegate *) CCApplication :: sharedApplication()); –

ответ

2

Xcode поддерживает Objective-C++, что позволяет использовать вызовы Objective-C из кода на C++. Измените расширение файла кода C++ с .cpp (или .cc) на .mm, и вы сможете получить значение из своего кода на C++ так же, как и из кода Objective-C.

0

В зависимости от компилятора и среды выполнения объект Objective C обычно является указателем на структуру, и переменная экземпляра может просто быть членом этой структуры C. И синтаксис C является подмножеством Objective C. Таким образом, ваш объект доступа к переменным из C или C++ может быть столь же просто, как:

if (myObject != NULL) { 
    x = myObject->myInstanceVariable; 
} 
+0

Учитывая, что вам нужно включить интерфейс Objective-C в свой код на C++, если вы хотите, чтобы это сработало, в любом случае вам понадобится Objective-C++, поэтому вы можете также использовать обычные аксессоры. – zneak

Смежные вопросы