Objective-C ++ kullanmak gitmek için sabırsız bir yoldur, ancak eğer bir nedenden dolayı bunu kullanamazsanız * bir C sarıcısından geçebilirsiniz, fakat bu tamamen C olmalıdır. Yani böyle bir şeye benzeyecektir:
//MyClass.h
class MyClass {
public:
MyClass() : myInt(10) {}
~MyClass() {}
int GetMyInt() const {return myInt;}
private:
int myInt;
}
//MyClassWrap.h
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {void * myClass} MyClassWrap;
MyClassWrap CreateMyClass();
void DestroyMyClass(MyClassWrap myClass);
int GetMyInt(MyClassWrap myClass);
#ifdef __cplusplus
}
#endif
//MyClassWrap.cpp
#include "MyClassWrap.h"
#include "MyClass.h"
static void * implCreate()
{
return static_cast(new MyClass());
}
static void implDestroy(void * myClass)
{
delete static_cast(myClass);
}
static int implGetMyInt(void * myClass)
{
return static_cast(myClass)->GetMyInt();
}
extern "C" {
MyClassWrap CreateMyClass() {
MyClassWrap wrap;
wrap.myClass=implCreate();
return wrap;
}
void DestroyMyClass(MyClassWrap myClass) {
implDestroy(myClass.myClass);
}
int GetMyInt(MyClassWrap myClass) {
return implGetMyInt(myClass.myClass);
}
} //extern "C"
Ayrı impl *
işlevlerine sahip olmak gerekli olmayabilir, bu gibi bir şey yaptığımdan beri bir süre geçti. Bu appoach ile birobjective-cdosyasına MyClassWrap.h
ekleyebilir veobjective-c++ olarak derlenmiş hiçbir dosya olmadan dolaylı olarak C ++ işlevlerine erişebilirsiniz.
* Belki kodda sınıf olarak adlandırılan çok fazla değişken değişemez