NAME ExtUtils::XSpp - XS for C++ SYNOPSIS xspp [--typemap=typemap.xsp [--typemap=typemap2.xsp]] Foo.xsp In Foo.xs (all in one line): INCLUDE: perl -S xspp --typemap=typemap.xsp Foo.xsp | OVERVIEW XS++ is just a thin layer over plain XS, hence to use it you are supposed to know, at the very least, C++ and XS. This means that you will need typemaps for both the normal XS pre-processor *xsubpp* and the XS++ pre-processor *xspp*. TYPEMAPS There is nothing special about typemap files (i.e. you can put typemaps directly in your .xsp file), but it is handy to have common typemaps in a separate file, to avoid duplication. %typemap{}{simple}; Just let XS++ that this is a valid type, the type will be passed unchanged to XS code except that any "const" qualifiers will be stripped. %typemap{}{parsed}{%%}; When "C++ type 1" is used, replace it with "C++ type 2" in the generated XS code. %typemap{}{reference}; Handle C++ references: the XS variable will be declared as a pointer, and it will be explicitly dereferenced in the function call. If it is used in the return value, the function will create copy of the returned value using a copy constructor. DESCRIPTION Anything that does not look like a XS++ directive or a class declaration is passed verbatim to XS. If you want XS++ to ignore code that looks like a XS++ directive or class declaration, simply surround it with a raw block delimiter like this: %{ XS++ won't interpret this %} %code See under Classes. %file %file{file/path.h}; ... %file{file/path2}; ... %file{-} By default XS++ output goes to standard output; to change this, use the %file directive; use "-" for standard output. %module %module{Module__Name}; Will be used to generate the "MODULE=Module__Name" XS directives. %name %name{Perl::Class} class MyClass { ... }; %name{Perl::Func} int foo(); Specifies the perl name under which the C++ class/function will be accessible. %typemap See TYPEMAPS above. Classes %name{My::Class} class MyClass { // can be called in Perl as My::Class->new( ... ); MyClass( int arg ); // My::Class->newMyClass( ... ); %name{newMyClass} MyClass( const char* str, int arg ); // standard DESTROY method ~MyClass(); int GetInt(); void SetValue( int arg = -1 ); %name{SetString} void SetValue( const char* string = NULL ); // Supply a C or C block for the XS int MyMethod( int a, int b ) %code{% RETVAL = a + b; %} %cleanup{% /* do something */ %}; }; Comments C-style "/* ... */" comments will be passed through unchanged. C++-style comments "// ..." will be passed throug with the leading "//" replaced with "##". AUTHOR Mattia Barbon LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.