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 PROTECTED] <mailto:[EMAIL PROTECTED]>> 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 PROTECTED]
    <mailto:[EMAIL PROTECTED]>> 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 (Cocoa-dev@lists.apple.com
    <mailto:Cocoa-dev@lists.apple.com>)

    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%2Bapple%40gmail.com

    This email sent to [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to