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