| %module(directors="1") director_abstract |
| %{ |
| #include <string> |
| |
| class Foo { |
| public: |
| virtual ~Foo() {} |
| virtual std::string ping() = 0; |
| virtual std::string pong() { return "Foo::pong();" + ping(); } |
| }; |
| |
| %} |
| |
| %include <std_string.i> |
| |
| %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 T> |
| 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<int>; |
| |
| |
| %inline %{ |
| struct A{ |
| virtual ~A() {} |
| friend int g(A* obj); |
| protected: |
| A(const A&){} |
| virtual int f() = 0; |
| }; |
| |
| int g(A* obj) {return 1;} |
| |
| %} |