%module(directors="1") director_default %warnfilter(SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR) DefaultsBase; %warnfilter(SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR) DefaultsDerived; %{ #include class Foo { public: Foo(int i = -1) {} virtual ~Foo() {} virtual std::string Msg(std::string msg = "default") { return "Foo-" + msg; } std::string GetMsg() { return Msg(); } std::string GetMsg(std::string msg) { return Msg(msg); } }; %} %include %feature("director") Foo; class Foo { public: Foo(int i = -1) {} virtual ~Foo() {} virtual std::string Msg(std::string msg = "default") { return msg; } std::string GetMsg() { return Msg(); } std::string GetMsg(std::string msg) { return Msg(msg); } }; %inline %{ class Bar { public: Bar() {} Bar(int i) {} virtual ~Bar() {} virtual std::string Msg(std::string msg = "default") { return "Bar-" + msg; } std::string GetMsg() { return Msg(); } std::string GetMsg(std::string msg) { return Msg(msg); } }; %} %feature("director") DefaultsBase; %feature("director") DefaultsDerived; %inline %{ typedef int* IntegerPtr; typedef double Double; struct DefaultsBase { virtual IntegerPtr defaultargs(double d, int * a = 0) = 0; virtual ~DefaultsBase() {} }; struct DefaultsDerived : DefaultsBase { int * defaultargs(Double d, IntegerPtr a = 0) { return 0; } }; %}