mirror of https://github.com/swig/swig
69 lines
874 B
OpenEdge ABL
69 lines
874 B
OpenEdge ABL
%module virtual_derivation
|
|
|
|
/*
|
|
|
|
Try to add to your favorite language a runtime test like
|
|
this:
|
|
|
|
b = B(3)
|
|
if (b.get_a() != b.get_b()):
|
|
print "something is wrong"
|
|
|
|
|
|
The test runs fine with python, but not with ruby.
|
|
|
|
*/
|
|
|
|
%inline %{
|
|
|
|
struct A
|
|
{
|
|
~A()
|
|
{
|
|
}
|
|
|
|
int m_a;
|
|
|
|
A(int a) :m_a(a)
|
|
{
|
|
}
|
|
|
|
int get_a()
|
|
{
|
|
return m_a;
|
|
}
|
|
|
|
};
|
|
|
|
struct B : virtual A
|
|
{
|
|
B(int a): A(a)
|
|
{
|
|
}
|
|
|
|
int get_b()
|
|
{
|
|
return get_a();
|
|
}
|
|
|
|
// in ruby, get_a() returns trash if called from b, unless is
|
|
// wrapped with the previous get_b or using the 'using'
|
|
// declaration:
|
|
// using A::get_a;
|
|
};
|
|
|
|
|
|
|
|
|
|
class IndexReader{
|
|
public:
|
|
virtual void norms() = 0;
|
|
virtual ~IndexReader() {}
|
|
};
|
|
|
|
class MultiReader : public IndexReader {
|
|
protected:
|
|
MultiReader();
|
|
};
|
|
%}
|