constructor. Now it doesn't crash, you don't need to use dirprot, and no, it is not emitting all the protected members, unless dirprot is used. Swig only emits the protected members or constructors needed to prevent the compilation for crashing. The rest of the protected members are emitted when dirprot is used. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6493 626c5289-ae23-0410-ae9c-e8d60b6d4f22
200 lines
3.5 KiB
OpenEdge ABL
200 lines
3.5 KiB
OpenEdge ABL
%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 emitter, 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;}
|
|
|
|
%}
|