[Haskell-cafe] C++ interface with Haskell

Don Stewart dons at galois.com
Fri Apr 18 16:08:11 EDT 2008


qdunkan:
> To threadjack a little bit, I've been interfacing haskell with c++.
> It gets awkward when the c++ structures use STL types like string and
> vector.  Of course those are too complex for haskell to marshal to.
> 
> What I've been doing is defining an XMarshal variant of the X c++
> class, that uses plain c arrays.  Then I marshal to that, and
> construct the c++ object properly from XMarshal in the c->c++ wrapper
> layer.  On a few occasions, when the c++ class is really big and only
> has one STL member, I make a partially constructed c++ object, pass
> the array separately, and then construct the proper c++ class from the
> broken haskell generated one.  Possibly dangerous as all get-out
> because I'm dealing with "unconstructed" c++ objects, but it seems to
> work.
> 
> Passing back to haskell is easier since I can use "&*vec.begin()",
> which according to the internet should be safe because STL guarantees
> that vector contents are contiguous.
> 
> I'm only saved by the fact that I don't have that many different kinds
> of classes to pass.  This would be much more drudgery if I had more.
> Does anyone have a better solution or convention for marshalling c++
> objects?
> 
> 
> I've also noticed warnings from g++ about hsc2hs's use of the OFFSETOF
> macro on c++ classes, but some googling of g++ mailing lists implied
> that it's harmless if you don't have virtual bases, and what sane
> person does, so I suppress it now :)

Would someone like to summarise the current approaches
to combining Haskell & C++ on the Haskell wiki, even if just in bullet
points?

-- Don


More information about the Haskell-Cafe mailing list