FROM : John Stiles
DATE : Thu Mar 20 18:07:52 2008
Wow. That is a really awesome trick there. Props to you!!
I wish Boost was easier to split apart so I didn't need to drag around
40MB of headers for just one featureā¦
Chris Meyer wrote:
> Don't listen to these C++ naysayers... we use it all the time very
> successfully.
>
> An easy way of reference counting using Obj-C++, I've used the boost
> libraries with boost::intrusive_ptr and these definitions:
>
> // file.h
>
>
> namespace boost
>
> {
>
> void intrusive_ptr_add_ref( id object );
>
> void intrusive_ptr_release( id object );
>
> }
>
>
> // file.m
>
> namespace boost
>
> {
>
> void intrusive_ptr_add_ref( id object )
>
> {
>
> [object retain];
>
> }
>
>
> void intrusive_ptr_release( id object )
>
> {
>
> [object release];
>
> }
>
> }
>
>
> Then you can do things like:
>
> MyObjCObject *my_object = [[[MyObjCObject alloc] init] autorelease];
>
> boost::intrusive_ptr< MyObjCObject> my_object_ptr = my_object;
>
> Now my_object_ptr can be safely stored in C++ classes, used in other
> classes such as
>
> stl::vector< boost::intrusive_ptr< MyObjCObject> > my_list;
>
> etc.
>
> Hope this helps.
>
>
> On Thu, Mar 20, 2008 at 9:40 AM, Jeremy <<email_removed>
> <mailto:<email_removed>>> wrote:
>
> Thanks for the input guys, I really appreciate the help.
>
> I do have a lot of C++ code that I would like to use and put behind a
> Cocoa front end, so I think that using Objective C++ classes as
> wrapper classes around my C++ classes is the route I would like to
> take.
>
> Anyone have an example of such a wrapper class so I can get an idea of
> what is the preferred methodology?
> I'm guessing that you create an Objective C++ class with a member
> variable that is a C++ class and then mirror the methods from the C++
> class?
>
> I'm worried that I'll still end up having to import the header file
> for my C++ class in my Objective C source file though, which caused a
> lot of compile errors previously.
>
>
> On Mar 20, 2008, at 12:32 PM, John Stiles wrote:
>
> > Without starting a religious war, I have to disagree with this.
> >
> > ObjC++ is probably a bad idea if you are a novice programmer in
> > general, but I think it also has some really good things going for
> > it, and having written huge amounts of ObjC++ code, I think it's
> > perfectly straightforward to use. It is by far your best bet for
> > writing cross-platform code that uses a native Cocoa front end.
> >
> >
> > Rob Napier wrote:
> >>
> >> On Wed, Mar 19, 2008 at 4:12 PM, Jeremy <<email_removed>
> <mailto:<email_removed>>> wrote:
> >>
> >>> Hi.
> >>>
> >>> I am just starting to learn Cocoa and would like to use
> standard C
> >>> ++
> >>> classes from my Objective C/C++ classes.
> >>>
> >> You really don't. You think you do (probably because you know C++),
> >> but then you enter the crazy messed up world of Objective-C++ and
> >> discover that you really wish you hadn't. A bit of an
> overstatement,
> >> yes, but really I'd recommend against using ObjC++ unless you have
> >> existing C++ code that you have to bridge to, and then it's
> best used
> >> just to wrap the C++ classes so that ObjC can deal with them. Learn
> >> Cocoa in pure ObjC.
> >>
> >> ObjC and C++ have very different models for managing memory, types,
> >> pointers and well, just about everything. Memory management in
> >> particular is a real hassle. ObjC++ strips away the safety nets
> from
> >> both ObjC and C++ because now you have to track two very different
> >> ways of managing memory (retain counting versus ref variables for
> >> instance).
> >>
> >>
> >>> Is there any known documentation on how to do this, or does
> anyone
> >>> have any pointers?
> >>>
> >>> I tried creating a new object of my C++ class and calling a
> >>> method on
> >>> it in a .m file and received a bunch of errors (including new not
> >>> being found).
> >>>
> >>> I then changed my .m file to a .mm file and all of the errors
> went
> >>> away except for one:
> >>> "cannot find interface declaration for 'MyClass'"
> >>>
> >> This probably means that ObjC expects there to be an ObjC class
> >> called
> >> MyClass (rather than a C++ class called MyClass; they're completely
> >> unrelated class structures). I suspect that you accidentally put
> >> "@class MyClass" somewhere rather than "class MyClass", or possibly
> >> wrote "@interface MyClass" somewhere. Alternately, you failed
> to put
> >> "class MyClass" above the declaration of m_pMemberVariable and
> so the
> >> compiler assumed MyClass was an ObjC class (this is less likely
> since
> >> you should have gotten a compiler error elsewhere for that error).
> >>
> >> I strongly recommend naming your ObjC and ObjC++ classes
> differently.
> >> I typically name the ObjC++ classes ending in "Wrapper" but that's
> >> because I only ever use these classes to wrap existing C++ classes
> >> defined in separate C++-only projects.
> >>
> >> Also, make sure that you're working in the right namespace. You may
> >> need to say "new myNamespace::MyClass" here.
> >>
> >> ObjC++ is deep magic. It is not a good place to learn Cocoa. It
> is a
> >> useful tool once you know Cocoa and need to integrate it at key
> >> points
> >> with C++.
> >>
> >> -Rob
> >>
>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>
> <mailto:<email_removed>>)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/cmeyer1969%<email_removed>
>
> This email sent to cmeyer1969+<email_removed>
> <mailto:cmeyer1969+<email_removed>>
>
>
DATE : Thu Mar 20 18:07:52 2008
Wow. That is a really awesome trick there. Props to you!!
I wish Boost was easier to split apart so I didn't need to drag around
40MB of headers for just one featureā¦
Chris Meyer wrote:
> Don't listen to these C++ naysayers... we use it all the time very
> successfully.
>
> An easy way of reference counting using Obj-C++, I've used the boost
> libraries with boost::intrusive_ptr and these definitions:
>
> // file.h
>
>
> namespace boost
>
> {
>
> void intrusive_ptr_add_ref( id object );
>
> void intrusive_ptr_release( id object );
>
> }
>
>
> // file.m
>
> namespace boost
>
> {
>
> void intrusive_ptr_add_ref( id object )
>
> {
>
> [object retain];
>
> }
>
>
> void intrusive_ptr_release( id object )
>
> {
>
> [object release];
>
> }
>
> }
>
>
> Then you can do things like:
>
> MyObjCObject *my_object = [[[MyObjCObject alloc] init] autorelease];
>
> boost::intrusive_ptr< MyObjCObject> my_object_ptr = my_object;
>
> Now my_object_ptr can be safely stored in C++ classes, used in other
> classes such as
>
> stl::vector< boost::intrusive_ptr< MyObjCObject> > my_list;
>
> etc.
>
> Hope this helps.
>
>
> On Thu, Mar 20, 2008 at 9:40 AM, Jeremy <<email_removed>
> <mailto:<email_removed>>> wrote:
>
> Thanks for the input guys, I really appreciate the help.
>
> I do have a lot of C++ code that I would like to use and put behind a
> Cocoa front end, so I think that using Objective C++ classes as
> wrapper classes around my C++ classes is the route I would like to
> take.
>
> Anyone have an example of such a wrapper class so I can get an idea of
> what is the preferred methodology?
> I'm guessing that you create an Objective C++ class with a member
> variable that is a C++ class and then mirror the methods from the C++
> class?
>
> I'm worried that I'll still end up having to import the header file
> for my C++ class in my Objective C source file though, which caused a
> lot of compile errors previously.
>
>
> On Mar 20, 2008, at 12:32 PM, John Stiles wrote:
>
> > Without starting a religious war, I have to disagree with this.
> >
> > ObjC++ is probably a bad idea if you are a novice programmer in
> > general, but I think it also has some really good things going for
> > it, and having written huge amounts of ObjC++ code, I think it's
> > perfectly straightforward to use. It is by far your best bet for
> > writing cross-platform code that uses a native Cocoa front end.
> >
> >
> > Rob Napier wrote:
> >>
> >> On Wed, Mar 19, 2008 at 4:12 PM, Jeremy <<email_removed>
> <mailto:<email_removed>>> wrote:
> >>
> >>> Hi.
> >>>
> >>> I am just starting to learn Cocoa and would like to use
> standard C
> >>> ++
> >>> classes from my Objective C/C++ classes.
> >>>
> >> You really don't. You think you do (probably because you know C++),
> >> but then you enter the crazy messed up world of Objective-C++ and
> >> discover that you really wish you hadn't. A bit of an
> overstatement,
> >> yes, but really I'd recommend against using ObjC++ unless you have
> >> existing C++ code that you have to bridge to, and then it's
> best used
> >> just to wrap the C++ classes so that ObjC can deal with them. Learn
> >> Cocoa in pure ObjC.
> >>
> >> ObjC and C++ have very different models for managing memory, types,
> >> pointers and well, just about everything. Memory management in
> >> particular is a real hassle. ObjC++ strips away the safety nets
> from
> >> both ObjC and C++ because now you have to track two very different
> >> ways of managing memory (retain counting versus ref variables for
> >> instance).
> >>
> >>
> >>> Is there any known documentation on how to do this, or does
> anyone
> >>> have any pointers?
> >>>
> >>> I tried creating a new object of my C++ class and calling a
> >>> method on
> >>> it in a .m file and received a bunch of errors (including new not
> >>> being found).
> >>>
> >>> I then changed my .m file to a .mm file and all of the errors
> went
> >>> away except for one:
> >>> "cannot find interface declaration for 'MyClass'"
> >>>
> >> This probably means that ObjC expects there to be an ObjC class
> >> called
> >> MyClass (rather than a C++ class called MyClass; they're completely
> >> unrelated class structures). I suspect that you accidentally put
> >> "@class MyClass" somewhere rather than "class MyClass", or possibly
> >> wrote "@interface MyClass" somewhere. Alternately, you failed
> to put
> >> "class MyClass" above the declaration of m_pMemberVariable and
> so the
> >> compiler assumed MyClass was an ObjC class (this is less likely
> since
> >> you should have gotten a compiler error elsewhere for that error).
> >>
> >> I strongly recommend naming your ObjC and ObjC++ classes
> differently.
> >> I typically name the ObjC++ classes ending in "Wrapper" but that's
> >> because I only ever use these classes to wrap existing C++ classes
> >> defined in separate C++-only projects.
> >>
> >> Also, make sure that you're working in the right namespace. You may
> >> need to say "new myNamespace::MyClass" here.
> >>
> >> ObjC++ is deep magic. It is not a good place to learn Cocoa. It
> is a
> >> useful tool once you know Cocoa and need to integrate it at key
> >> points
> >> with C++.
> >>
> >> -Rob
> >>
>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>
> <mailto:<email_removed>>)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/cmeyer1969%<email_removed>
>
> This email sent to cmeyer1969+<email_removed>
> <mailto:cmeyer1969+<email_removed>>
>
>






Cocoa mail archive

