On 20 Apr 2015, at 09:05, Eric Matecki <eml...@wanadoo.fr> wrote:
>>>    CGDataProviderRef  provider = CGDataProviderCreateDirect( &mps, 
>>> sizeof(mps), &callbacks );
>>> 
>>>    NSWindow*  window = (NSWindow*)Window();
>> 
>> What does this line do?
> 
> It's just a global function which returns the (only) window.
> For crossplatform compatibility reasons (our app runs on MacOSX, Linux, 
> Windows and Android) it returns a void*,
> that's why the cast is needed.

 Not sure if you know this, but there are many tricks to let you avoid casts 
like this. For one, you can typedef the type, so the cross-platform code can 
assume a return type named CrossPlatformWindowPtr and platform-specific code 
sees a platform-specific type anyway:

#if __OBJC__
#import <Cocoa/Cocoa.h>
typedef NSWindow *CrossPlatformWindow;
#else
typedef struct NSWindow  *CrossPlatformWindow;
#endif

This will produce the same name-mangling in C++ on Mac and iOS, and since both 
are pointers they're the identical size, but the second compiles in C and 
C++-only files. It also means that all ObjC source code can just use it as the 
NSWindow it is, taking advantage of what little type checking Objective-C 
offers, at least. And no accidental hidden bugs by casting a 
CrossPlatformButton to a CrossPlatformWindow by accident.

And the Windows versions could just have a simple

typedef HWND CrossPlatformWindow;

or whatever would be appropriate there. If you're curious about more safe and 
practical C++ tricks, I spent almost an hour talking about a lot of C++ on 
Andrew Pontious' Edge Cases podcast once: 
http://edgecasesshow.com/017-then-youre-just-writing-cplusplus.html 
<http://edgecasesshow.com/017-then-youre-just-writing-cplusplus.html>

-- Uli
http://stacksmith <http://stacksmith/>.org/
_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to