Объективный член C в классе C++
Возможно ли иметь объективный член c в классе C++
@interface ObjectiveCClass : UIViewController {
int someVarialbe;
}
- (void)someFunction;
@end
class CPlusPlusClass{
ObjectiveCClass obj; // have a objective c member
void doSomething(){
obj.someFunction; // and call a objective c method
}
};
Любое руководство будет по достоинству оценено.
ура
2 ответа
Чтобы создать заголовочные файлы, которые могут быть разделены между кодом obj-c и cpp, вы можете использовать предопределенные макросы компилятора, чтобы сделать что-то вроде:
// A .h file defining a objc class and a paired cpp class
// The implementation for both the objective C class and CPP class
// MUST be in a paired .mm file
#pragma once
#ifdef __OBJC__
#import <CoreFoundation/CoreFoundation.h>
#else
#include <objc/objc.h>
#endif
#ifdef __OBJC__
@interface ObjectiveCClass :
...
typedef ObjectiveCClass* ObjectiveCClassRef;
#else
typedef id ObjectiveCClassRef;
#endif
#ifdef __cplusplus
class CPlusPlusClass {
ObjectiveCClassRef obj;
void doSomethind();
};
#endif
Я не уверен на 100%, что законно иметь тип изменения ObjectiveCClassRef, подобный тому, который существует между сборками c / cpp и obj-c. Но id
является совместимым с ac / cpp типом, определенным в файлах заголовков целевого C и способным хранить указатель целевого класса C, и, при использовании в файлах.m или.mm, позволяет вызывать объект напрямую, используя синтаксис объективного C.
Существует диалект Objective-C под названием Objective-C++, который взаимодействует с C++ так же, как Objective-C взаимодействует с C. Вы можете либо изменить настройку файла на Objective-C++, либо изменить расширение на ".mm". Вам по-прежнему нужно будет обращаться к объектам Objective-C через указатели и танцевать alloc-init и все это, конечно.