in reply to Writing XS frontends to C++ libraries.
Returning objects should still be done with pointers -- you must use C++ new to allocate all C++ objects you want to return to perl.
Here's how to write the get_set example above. First you need to return a pointer, not an object:
Then you need to add declarations for first and maxitems (I'm just guessing at what the types might be):MySet * MyEnquire::get_set(first, maxitems)
If MySetIterator is a template, I would typedef it to a simple name and use only the simple name in XS code (and the typemap). I'm not sure if XS needs that, but I use macros to help convert type names to Perl package names and the macros do need simple symbols.MySet * MyEnquire::get_set(first, maxitems) MySetIterator * first int maxitems
Finally, you need to glue the XS to the method call itself. If the get_set method returns an object, you need to make a copy. If it takes first as an object, you need to dereference the pointer:
MySet * MyEnquire::get_set(first, maxitems) MySetIterator * first int maxitems CODE: RETVAL = new MySet (); *RETVAL = THIS->get_set(*first, maxitems); OUTPUT: RETVAL
|
---|
In Section
Seekers of Perl Wisdom