Add support for member function pointers with ref-qualifiers
This commit is contained in:
parent
7e4717320b
commit
eb68e4375d
4 changed files with 195 additions and 45 deletions
|
|
@ -1,5 +1,11 @@
|
|||
%module cpp11_ref_qualifiers
|
||||
|
||||
%warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) ccextra2;
|
||||
%warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) ccextra3;
|
||||
%warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) cc2;
|
||||
%warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) cc3;
|
||||
%warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK_MSG) cc5;
|
||||
|
||||
%include <std_string.i>
|
||||
|
||||
%ignore Host::h() const &;
|
||||
|
|
@ -89,3 +95,114 @@ struct ConversionOperators2 {
|
|||
virtual operator string() && { return std::move(string()); }
|
||||
};
|
||||
%}
|
||||
|
||||
%inline %{
|
||||
struct Funcs {
|
||||
short FF(bool) { return 0; }
|
||||
short CC(bool) const & { return 0; }
|
||||
};
|
||||
|
||||
class MemberFuncPtrs
|
||||
{
|
||||
public:
|
||||
// member ref-qualified function pointers, unnamed parameters
|
||||
int aaa1(short (Funcs::*)(bool) &) const;
|
||||
int aaa2(short (Funcs::* const *&)(bool) &) const;
|
||||
int aaa3(short (Funcs::* *&)(bool) &) const;
|
||||
int aaa4(short (Funcs::* *const&)(bool) &) const;
|
||||
int aaa5(short (Funcs::* &)(bool) &) const;
|
||||
int aaa6(short (Funcs::* const)(bool) &) const;
|
||||
int aaa7(short (Funcs::* const&)(bool) &) const;
|
||||
|
||||
// member cv-qualified and ref-qualified function pointers, unnamed parameters
|
||||
int bbb1(short (Funcs::*)(bool) const &) const;
|
||||
int bbb2(short (Funcs::* const *&)(bool) const &) const;
|
||||
int bbb3(short (Funcs::* *&)(bool) const &) const;
|
||||
int bbb4(short (Funcs::* *const&)(bool) const &) const;
|
||||
int bbb5(short (Funcs::* &)(bool) const &) const;
|
||||
int bbb6(short (Funcs::* const)(bool) const &) const;
|
||||
int bbb7(short (Funcs::* const&)(bool) const &) const;
|
||||
|
||||
// member ref-qualified function pointers, named parameters
|
||||
int qqq1(short (Funcs::* qq1)(bool) &) const;
|
||||
int qqq2(short (Funcs::* const *& qq2)(bool) &) const;
|
||||
int qqq3(short (Funcs::* *& qq3)(bool) &) const;
|
||||
int qqq4(short (Funcs::* *const& qq4)(bool) &) const;
|
||||
int qqq5(short (Funcs::* & qq5)(bool) &) const;
|
||||
int qqq6(short (Funcs::* const qq6)(bool) &) const;
|
||||
int qqq7(short (Funcs::* const& qq7)(bool) &) const;
|
||||
|
||||
// member cv-qualified and ref-qualified function pointers, named parameters
|
||||
int rrr1(short (Funcs::* rr1)(bool) const &) const;
|
||||
int rrr2(short (Funcs::* const *& rr2)(bool) const &) const;
|
||||
int rrr3(short (Funcs::* *& rr3)(bool) const &) const;
|
||||
int rrr4(short (Funcs::* *const& rr4)(bool) const &) const;
|
||||
int rrr5(short (Funcs::* & rr5)(bool) const &) const;
|
||||
int rrr6(short (Funcs::* const rr6)(bool) const &) const;
|
||||
int rrr7(short (Funcs::* const& rr7)(bool) const &) const;
|
||||
};
|
||||
|
||||
// member ref-qualified function pointers, unnamed parameters
|
||||
int MemberFuncPtrs::aaa1(short (Funcs::*)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::aaa2(short (Funcs::* const *&)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::aaa3(short (Funcs::* *&)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::aaa4(short (Funcs::* *const&)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::aaa5(short (Funcs::* &)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::aaa6(short (Funcs::* const)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::aaa7(short (Funcs::* const&)(bool) &) const { return 0; }
|
||||
|
||||
// member cv-qualified and ref-qualified function pointers, unnamed parameters
|
||||
int MemberFuncPtrs::bbb1(short (Funcs::*)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::bbb2(short (Funcs::* const *&)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::bbb3(short (Funcs::* *&)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::bbb4(short (Funcs::* *const&)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::bbb5(short (Funcs::* &)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::bbb6(short (Funcs::* const)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::bbb7(short (Funcs::* const&)(bool) const &) const { return 0; }
|
||||
|
||||
// member ref-qualified function pointers, named parameters
|
||||
int MemberFuncPtrs::qqq1(short (Funcs::* qq1)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::qqq2(short (Funcs::* const *& qq2)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::qqq3(short (Funcs::* *& qq3)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::qqq4(short (Funcs::* *const& qq4)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::qqq5(short (Funcs::* & qq5)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::qqq6(short (Funcs::* const qq6)(bool) &) const { return 0; }
|
||||
int MemberFuncPtrs::qqq7(short (Funcs::* const& qq7)(bool) &) const { return 0; }
|
||||
|
||||
// member cv-qualified and ref-qualified function pointers, named parameters
|
||||
int MemberFuncPtrs::rrr1(short (Funcs::* rr1)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::rrr2(short (Funcs::* const *& rr2)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::rrr3(short (Funcs::* *& rr3)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::rrr4(short (Funcs::* *const& rr4)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::rrr5(short (Funcs::* & rr5)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::rrr6(short (Funcs::* const rr6)(bool) const &) const { return 0; }
|
||||
int MemberFuncPtrs::rrr7(short (Funcs::* const& rr7)(bool) const &) const { return 0; }
|
||||
|
||||
// member cv-qualified and ref-qualified pointer variables
|
||||
short (Funcs::* cc1)(bool) const & = &Funcs::CC;
|
||||
|
||||
short (Funcs::* const * ccextra2)(bool) const & = &cc1;
|
||||
short (Funcs::* * ccextra3)(bool) const & = &cc1;
|
||||
short (Funcs::* *const ccextra4)(bool) const & = &cc1;
|
||||
|
||||
short (Funcs::* const *& cc2)(bool) const & = ccextra2;
|
||||
short (Funcs::* *& cc3)(bool) const & = ccextra3;
|
||||
short (Funcs::* *const& cc4)(bool) const & = ccextra4;
|
||||
short (Funcs::* & cc5)(bool) const & = cc1;
|
||||
short (Funcs::* const cc6)(bool) const & = &Funcs::CC;
|
||||
short (Funcs::* const& cc7)(bool) const & = cc1;
|
||||
%}
|
||||
|
||||
%inline %{
|
||||
|
||||
struct Funktions {
|
||||
int addByValue(const int &a, int b) const & { return a+b; }
|
||||
int * addByPointer(const int &a, int b) const & { static int val; val = a+b; return &val; }
|
||||
int & addByReference(const int &a, int b) const & { static int val; val = a+b; return val; }
|
||||
};
|
||||
|
||||
int call1(int (Funktions::*d)(const int &, int) const &, int a, int b) { Funktions f; return (f.*d)(a, b); }
|
||||
//int call2(int * (Funktions::*d)(const int &, int) const &, int a, int b) { Funktions f; return *(f.*d)(a, b); }
|
||||
//int call3(int & (Funktions::*d)(const int &, int) const &, int a, int b) { Funktions f; return (f.*d)(a, b); }
|
||||
%}
|
||||
%constant int (Funktions::*ADD_BY_VALUE)(const int &, int) const & = &Funktions::addByValue;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue