On Tue, 17 Jun 2003 09:07:06 +0100 Alastair Reid <[EMAIL PROTECTED]> wrote:
> On Tuesday 17 June 2003 2:33 am, Abraham Egnor wrote: > > I'd like to make a haskell binding for a C++ library. Most of the > > tools out there seem oriented towards c bindings, so it looks like > > I'll be writing the FFI code generator myself. While I'm at it I > > figure I might as well just make a general C++ binding tool. I've > > been thinking about this, and I'd like some feedback on the ideas > > I've had. > > All previous interfaces to C++ libraries that I know of have been > created by writing a bunch of wrapper functions with C-style types > like these wrapper for a virtual function 'foo'. > > void foo_T(S x) { x->foo(); } > void foo_T(T x) { x->foo(); } > void foo_T(U x) { x->foo(); } > > [Note that these are C++ functions but that their type is one that C > programs can call.] I'm assuming you don't want overloading here as these aren't functions that can be called in C (or C99?). > > People have shied away from trying to create a more direct interface > because: > > 1) C++ is a huge language (with the complexity mostly in types, > classes and templates where you can't easily avoid them) and it seems > that to be able to cope with any reasonable number of C++ libraries, > you'd have to implement a large part of that language. > > 2) C++'s type/ class system is quite different from Haskell's class > system. Any mapping of on to the other is likely to fall apart rather > quickly. If the code you are interfacing to doesn't make too much use of templates then you can do what I did and hack together a SWIG module to flatten the C++ to C (I had hoped that that would already be available as it effectively does that anyways but I couldn't find it). _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell