%module(directors="1") director_stl #pragma SWIG nowarn=SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR %include "std_string.i" %include "std_pair.i" %include "std_vector.i" #ifndef SWIG_STD_DEFAULT_INSTANTIATION %template() std::vector; %template() std::vector; %template() std::vector; %template() std::pair; %template() std::pair; %template() std::pair; #endif %feature("director") Foo; %feature("director:except") { #ifndef SWIGPHP if ($error != NULL) { #else if ($error == FAILURE) { #endif throw Swig::DirectorMethodException(); } } %exception { try { $action } catch (...) { SWIG_fail; } } %inline { class Foo { public: virtual ~Foo() {} virtual std::string& bar(std::string& s) { return s; } virtual std::string ping(std::string s) = 0; virtual std::string pong(const std::string& s) { return std::string("Foo::pong:") + s + ":" + ping(s); } std::string tping(std::string s) { return ping(s); } std::string tpong(const std::string& s) { return pong(s); } virtual std::pair pident(const std::pair& p) { return p; } virtual std::vector vident(const std::vector& p) { return p; } virtual std::vector vsecond(const std::vector& p, const std::vector& s) { return s; } std::pair tpident(const std::pair& p) { return pident(p); } std::vector tvident(const std::vector& p) { return vident(p); } virtual std::vector tvsecond(const std::vector& p, const std::vector& s) { return vsecond(p,s); } virtual std::vector vidents(const std::vector& p) { return p; } std::vector tvidents(const std::vector& p) { return vidents(p); } }; }