
you mean, you hack around with the internal representation of those structures? Well, if you want to avoid double-copying, C++ can't access Haskell sequences, and Haskell can't access C++ sequences, I guess I don't see an alternative.
I don't really mind double copying, but having to declare c variants (i.e. no stl) of all the c++ structures and then copy from one to the other is a little tedious. I was hoping there was some clever trick to make that easier...
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.
safe until either: the vector's contents change, if Haskell is assuming it's immutable,
Well, naturally I peekArray before letting c++ have it back.
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?
not "better", but, you could wrap the methods of the class and call back into C++ (through C wrappers) to do anything with the class, if it suited your purposes better and wasn't too slow
Yeah, I was thinking of that, but it seemed like even more of a hassle. However, a more practical variant might be to write a haskell interface to marshal to vectors and strings, probably involving some void pointer sketchiness since naturally template types can't be expressed in a C function signature, and then poke those into the struct when I pass it. That would only work for vectors stored by pointer of course.