%module(directors="1") director_abstract %{ #include class Foo { public: virtual ~Foo() {} virtual std::string ping() = 0; virtual std::string pong() { return "Foo::pong();" + ping(); } }; %} %include %feature("director") Foo; class Foo { public: virtual ~Foo() {} virtual std::string ping() = 0; virtual std::string pong() { return "Foo::pong();" + ping(); } }; %feature("director"); %inline %{ class Example0 { protected: int xsize, ysize; public: Example0(int x, int y) : xsize(x), ysize(y) { } Example0() { } public: virtual ~Example0() {} int GetXSize() const { return xsize; } // pure virtual methods that must be overridden virtual int Color(unsigned char r, unsigned char g, unsigned char b) { return 0; } static int get_color(Example0 *ptr, unsigned char r, unsigned char g, unsigned char b) { return ptr->Color(r, g, b); } }; class Example1 { protected: int xsize, ysize; protected: /* this shouldn't be emitted, unless 'dirprot' is used, since they is already a public constructor */ Example1(int x, int y) : xsize(x), ysize(y) { } public: Example1() { } public: virtual ~Example1() {} int GetXSize() const { return xsize; } // pure virtual methods that must be overridden virtual int Color(unsigned char r, unsigned char g, unsigned char b) = 0; static int get_color(Example1 *ptr, unsigned char r, unsigned char g, unsigned char b) { return ptr->Color(r, g, b); } }; class Example2 { protected: int xsize, ysize; protected: /* there is no default constructor, hence, all protected constructors should be emitted */ Example2(int x) { } Example2(int x, int y) : xsize(x), ysize(y) { } public: virtual ~Example2() {} int GetXSize() const { return xsize; } // pure virtual methods that must be overridden virtual int Color(unsigned char r, unsigned char g, unsigned char b) = 0; static int get_color(Example2 *ptr, unsigned char r, unsigned char g, unsigned char b) { return ptr->Color(r, g, b); } }; class Example4 { protected: int xsize, ysize; protected: Example4() { } /* this is not emitted, unless dirprot is used */ Example4(int x, int y) : xsize(x), ysize(y) { } public: virtual ~Example4() {} int GetXSize() const { return xsize; } // pure virtual methods that must be overridden virtual int Color(unsigned char r, unsigned char g, unsigned char b) = 0; static int get_color(Example4 *ptr, unsigned char r, unsigned char g, unsigned char b) { return ptr->Color(r, g, b); } }; namespace ns { template class Example3 { protected: /* the default constructor is always emitted, even when protected, having another public constructor, and 'dirprot' is not used. This is just for Java compatibility */ Example3() { } /* this is no emitted, unless dirprot mode is used */ Example3(int x) { } public: Example3(int x, int y) { } virtual ~Example3() {} // pure virtual methods that must be overridden virtual int Color(unsigned char r, unsigned char g, unsigned char b) = 0; static int get_color(Example3 *ptr, unsigned char r, unsigned char g, unsigned char b) { return ptr->Color(r, g, b); } }; } %} %template(Example3_i) ns::Example3; %inline %{ struct A{ virtual ~A() {} friend int g(A* obj); protected: A(const A&){} virtual int f() = 0; }; int g(A* obj) {return 1;} %}