Skip navigation.
 
mlRe: Using C++ classes from Objective C
FROM : Jeremy
DATE : Thu Mar 20 17:40:21 2008

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>> 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
>>

Related mailsAuthorDate
mlUsing C++ classes from Objective C Jeremy Mar 19, 21:12
mlRe: Using C++ classes from Objective C John Stiles Mar 19, 21:22
mlRe: Using C++ classes from Objective C Jeremy Mar 19, 21:32
mlRe: Using C++ classes from Objective C Jens Alfke Mar 19, 23:22
mlRe: Using C++ classes from Objective C Rob Napier Mar 20, 16:11
mlRe: Using C++ classes from Objective C John Stiles Mar 20, 17:32
mlRe: Using C++ classes from Objective C Jeremy Mar 20, 17:40
mlRe: Using C++ classes from Objective C John Stiles Mar 20, 18:07
mlRe: Using C++ classes from Objective C Chris Meyer Mar 20, 18:11
mlRe: Using C++ classes from Objective C Rob Napier Mar 20, 18:32
mlRe: Using C++ classes from Objective C Christopher Nebel Mar 20, 19:33
mlRe: Using C++ classes from Objective C Clark Cox Mar 20, 20:13
mlRe: Using C++ classes from Objective C Jeremy Mar 20, 20:34
mlRe: Using C++ classes from Objective C Jeff LaMarche Mar 20, 21:05
mlRe: Using C++ classes from Objective C Rob Napier Mar 20, 21:20
mlRe: Using C++ classes from Objective C Scott Thompson Mar 21, 03:57