On 27 May '08, at 4:50 PM, Todd Heberlein wrote:

(1) Changing an Objective-C file to an Objective-C++ object (by renaming it to a .mm file) often causes me to rename a lot of files to .mm, because if the Objective-C class definition has a C++ object in it, every source code file that includes that Objective-C class definition needs to be renamed to a .mm file;

I came up with an idiom to avoid this. Let's say the C++ class you want to use is MyCppClass. You declare the Objective-C class that uses it as:

// MyObjCClass.h

#ifdef __cplusplus
class MyCppClass;
#else
typedef struct MyCppClass MyCppClass;
#endif

@interface MyObjCClass {
        @private
        MyCppClass *cppObject;
}
....
@end

This basically tells a white lie to any non-C++-savvy source file that imports the header, telling them that MyCppClass* is just some kind of pointer, and not to worry its pretty little head about exactly what it is. This is safe because (a) all pointers are the same size, so the ivar layout is correct; and (b) no one but MyCppClass.mm can actually access the raw instance variable anyway.

—Jens

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________

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