FROM : Clark Cox
DATE : Thu Mar 20 20:13:33 2008
On Thu, Mar 20, 2008 at 11:33 AM, Christopher Nebel <c.<email_removed>> wrote:
> On Mar 20, 2008, at 10:32 AM, Rob Napier wrote:
>
> > Say you have a C++ object called MyObject in the namespace myapp
> > that you want to access through your ObjC. What I tend to do is
> > create an ObjC++ object called MyObjectWrapper that owns a
> > myapp::MyObject and presents a pure ObjC interface to its methods.
> > Users of MyObjectWrapper don't have to include MyObject.h. The trick
> > is that you need to use void* rather than a real class type in
> > MyObjectWrapper.h like this:
> >
> > typedef void* MyObjectPtr
> >
> > @interterface MyObjectWrapper : NSObject
> > {
> > MyObjectPtr myObject;
> > }
> >
> > That will get you around having C++ class definitions in your header.
>
> Actually, you don't need the "void" typedef -- you can exploit the
> fact that "class" and "struct" are (almost) synonymous in C++:
>
> struct MyObject; // forward declaration.
> typedef struct MyObject MyObject; // this is Objective-C, after all...
>
> @interterface MyObjectWrapper : NSObject
> {
> MyObject *myObject;
> }
Or just forego the typedef altogether:
@interface MyObjectWrapper : NSObject
{
struct MyObject *myObject;
}
--
Clark S. Cox III
<email_removed>
DATE : Thu Mar 20 20:13:33 2008
On Thu, Mar 20, 2008 at 11:33 AM, Christopher Nebel <c.<email_removed>> wrote:
> On Mar 20, 2008, at 10:32 AM, Rob Napier wrote:
>
> > Say you have a C++ object called MyObject in the namespace myapp
> > that you want to access through your ObjC. What I tend to do is
> > create an ObjC++ object called MyObjectWrapper that owns a
> > myapp::MyObject and presents a pure ObjC interface to its methods.
> > Users of MyObjectWrapper don't have to include MyObject.h. The trick
> > is that you need to use void* rather than a real class type in
> > MyObjectWrapper.h like this:
> >
> > typedef void* MyObjectPtr
> >
> > @interterface MyObjectWrapper : NSObject
> > {
> > MyObjectPtr myObject;
> > }
> >
> > That will get you around having C++ class definitions in your header.
>
> Actually, you don't need the "void" typedef -- you can exploit the
> fact that "class" and "struct" are (almost) synonymous in C++:
>
> struct MyObject; // forward declaration.
> typedef struct MyObject MyObject; // this is Objective-C, after all...
>
> @interterface MyObjectWrapper : NSObject
> {
> MyObject *myObject;
> }
Or just forego the typedef altogether:
@interface MyObjectWrapper : NSObject
{
struct MyObject *myObject;
}
--
Clark S. Cox III
<email_removed>






Cocoa mail archive

