Add support for unnamed parameters: member const function pointers

This commit is contained in:
William S Fulton 2017-03-06 19:58:39 +00:00
commit fc638814ae
2 changed files with 25 additions and 0 deletions

View file

@ -27,6 +27,8 @@ public:
void move(double dx, double dy);
virtual double area(Shape &ref, int & (FunkSpace::Funktions::*d)(const int &, int)) { return 0.0; }
virtual double area_const(Shape &ref, int & (FunkSpace::Funktions::*)(const int &, int) const) { return 0.0; } // Note: unnamed parameter
virtual double zyx(int (FunkSpace::Funktions::*)() const) { return 0.0; } // Note: unnamed parameter
virtual double abc(Thing<short> ts, Thing< const Space::Shape * > tda[]) { return 0.0; }
virtual ~Shape() {}
};
@ -55,6 +57,10 @@ double do_op(Space::Shape *s, double (Space::Shape::*m)(void)) {
return (s->*m)();
}
double do_op_const(Space::Shape *s, double (Space::Shape::*m)(void) const) {
return (s->*m)();
}
double (Space::Shape::*areapt(Space::Shape &ref, int & (FunkSpace::Funktions::*d)(const int &, int)))(Space::Shape &, int & (FunkSpace::Funktions::*d)(const int &, int)) {
return &Space::Shape::area;
}
@ -75,6 +81,7 @@ double (Space::Shape::*abcvar)(Thing<short>, Thing< const Space::Shape * >[]) =
/* Some constants */
%constant double (Space::Shape::*AREAPT)(Space::Shape &, int & (FunkSpace::Funktions::*)(const int &, int)) = &Space::Shape::area;
%constant double (Space::Shape::*AREAPT_CONST)(Space::Shape &, int & (FunkSpace::Funktions::*)(const int &, int) const) = &Space::Shape::area_const;
%constant double (Space::Shape::*PERIMPT)(Thing<short>, Thing< const Space::Shape * >[]) = &Space::Shape::abc;
%constant double (Space::Shape::*NULLPT)(void) = 0;

View file

@ -5670,6 +5670,24 @@ direct_abstract_declarator : direct_abstract_declarator LBRACKET RBRACKET {
$$.have_parms = 1;
}
}
| direct_abstract_declarator LPAREN parms RPAREN type_qualifier {
SwigType *t;
$$ = $1;
t = NewStringEmpty();
SwigType_add_function(t,$3);
SwigType_push(t, $5);
if (!$$.type) {
$$.type = t;
} else {
SwigType_push(t,$$.type);
Delete($$.type);
$$.type = t;
}
if (!$$.have_parms) {
$$.parms = $3;
$$.have_parms = 1;
}
}
| LPAREN parms RPAREN {
$$.type = NewStringEmpty();
SwigType_add_function($$.type,$2);