Re: Objective C and C++
Re: Objective C and C++
- Subject: Re: Objective C and C++
- From: Brian Willoughby <email@hidden>
- Date: Sun, 21 Dec 2008 23:50:57 -0800
AudioStreamBasicDescription is merely a struct, and it carries no
enforced behavior with it. As Bill often points out when someone
here has a problem creating a valid AudioStreamBasicDescription,
CAStreamBasicDescription is a C++ object which carries code with it
that will create consistent field values for you. You don't get any
of that automatic help if you're not using C++. It's not impossible
to get it right on your own, but you'll get little support if you
take that route.
As for mixing C++ and ObjC with no problems and no overhead, that's
not exactly true. If all of your code is compiled in one project,
that's probably not a problem. However, if you are trying to create
a Framework for audio, and you want to support ObjC and Standard C
for projects which do not involve any C++ at all, then you get into a
situation where your headers and ObjC objects cannot reference any C+
+ objects, or else the C++ name-mangling will destroy certain clients
of your Framework.
Also, C++ does have a certain amount of hidden overhead in its
compile-time code generation. ObjC shifts this sort of thing to the
run-time, but ObjC++ has both the compile-time code generation
overhead of C++ and the run-time overhead of ObjC. It's not the sort
of thing that affects every program written in ObjC++, but it's a far
cry from "zero overhead." Again, the overhead is quite minimal, but
it is not non-existent.
Brian Willoughby
Sound Consulting
On Dec 21, 2008, at 23:32, tahome izwah wrote:
Actually, all the CA... files contain C++ code, not just
CAStreamBasicDescription. You can still use a "regular"
AudioStreamBasicDescription if you don't want to deal with C++ at this
point, though I fail to see what difference this would make (if you
rename the Cocoa files properly you can mix C++ and ObjC with no
problems and zero overhead).
--th
2008/12/22 Brian Willoughby <email@hidden>:
Nick has a good point. CoreAudio and CoreMIDI are C API, so you
don't need
anything fancy at all. ObjC is a superset of C, so every CoreAudio/
MIDI
call can be made from a normal Cocoa source file. No C++ needed.
The only potential need for C++ that I have run into is the
CAStreamBasicDescription object. It's very handy, but I usually
just make
do without it. Sometimes it's more trouble to get C++ to mix in a
Cocoa
than to simply roll your own description structures. Now that I
think about
it, Apple should rewrite CAStreamBasicDescription as C (if
possible) or make
an ObjC variant available. That would save a lot of Cocoa
developers from
needless hassle.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden