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:
MySet *
MyEnquire::get_set(first, maxitems)
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)
MySetIterator * first
int 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.
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