Using Cocoa/objective-c in C++

nightition
Unregistered
 
Post: #1
Hello,

although an experienced programmer, I'm completely new to the Mac world, so please bear with me Smile

We're currently developing an engine and a game, which we'd like to run on most modern platforms.

As a beginner, I thought Carbon would be my most natural choice, since I can call it from C++. However, since Apple discontinued future Carbon support, it seems pointless to start learning an already dead technology.

What I am wondering is how Cocoa with Objective-C would fit into this whole story? In other words, is it possible to have an otherwise C++ application, but with just small parts using Cocoa for window initialization/message processing, etc.? I've seen examples where objc code calls c++ code, but I don't find it convenient since it doesn't fit with the code on other platforms - I would need to 'wrap' the whole objective-c part around some c++ code in order to make the whole thing portable.

Is it realistic to expect to achieve something like this? What are other developers who need cross-platform compatibility doing? Is there a universal solution to all this?


*rant*
A few months ago, I got really excited about Macs, and really looked forward to switching to OS X... However, after finding out that Carbon is officially going out, and that practically the only way to program for OS X in the future will be Cocoa/objective-c, I'm getting more and more frustrated. Now I'm near the point to just dump the whole Mac thing and get back to Windows...
*end rant*


Ivan
Quote this message in a reply
Luminary
Posts: 5,143
Joined: 2002.04
Post: #2
ObjC and C++ play perfectly well together. Putting ObjC objects in C++ classes is slightly easier than putting C++ objects in ObjC classes. .mm files can include both ObjC and C++ code.

I don't understand the basis for the rant. Carbon was nasty, it's much better dead. In its place, you get a modern OO application framework in a nice OO language. What's the issue?
Quote this message in a reply
Sage
Posts: 1,199
Joined: 2004.10
Post: #3
ObjCis a sweet language, so don't fret too much.

Anyway, like you, I'm a C++ guy. My 3d stuff is 100% C++. But, there's nothing stopping you from encapsulating OS X "toolkit" stuff written in ObjC/Cocoa with a C++ interface.

My own project has a pretty decent cocoa backend, but apps using it are 100% C++, and never need to touch ObjC.

That being said, if you're writing a nice GUI app, you'll completely and utterly fall in love with Cocoa. You just have to let go. Use C++ where it makes sense, use ObjC where it makes sense. I imagine you have some routines written in highly optimized C, right? Well, this is just one more C-like language to deal with. Each have their strengths.

Seriously, I learned ObjC in a weekend.
Quote this message in a reply
Moderator
Posts: 434
Joined: 2002.09
Post: #4
nightition Wrote:Hello,
is it possible to have an otherwise C++ application, but with just small parts using Cocoa for window initialization/message processing, etc.?

Yes. I did this as an experiment once. My C++ game core had it's own event class that represented events like key-down, mouse-down. Then I created a Cocoa application shell, and tied them together. Whenever the cocoa framework told me there was a mousedown, I created one of my game-event objects and told my game engine to process it.

Months later I replaced the Cocoa framework with SDL, again converting SDL events into my internal game-events. Thus most of my game could be written in C++ and was oblivious to the change in the wrapper.

That worked fine as far as it went. It turns out I should have abstracted screen coordinates as well, because the SDL coordinate system differed. In addition, I should mention my game was only theoretically portable- I never tried to port it to Windows for instance.

But the point is that most of your game can be C++, and you can use Cocoa and Obj-C just for the window, menus, and events, and it's not particularly difficult.

Measure twice, cut once, curse three or four times.
Quote this message in a reply
Post Reply 

Possibly Related Threads...
Thread: Author Replies: Views: Last Post
  Cocoa with C++, instead of Objective-c? bronxbomber92 22 14,320 Jan 12, 2007 02:00 PM
Last Post: Duane