Чтобы создать заголовочные файлы, которые могут быть разделены между кодом 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.