%module callback %callback(1) foo; %callback(1) foof; %callback(1) A::bar; %callback(1) A::foom; %callback("%s_Cb_Ptr") foo_T; // old style, still works. %inline %{ int foo(int a) { return a; } int foof(int a) { return 3*a; } struct A { static int bar(int a) { return 2*a; } int foom(int a) { return -a; } //friend int foof(int a); }; extern "C" int foobar(int a, int (*pf)(int a)) { return pf(a); } extern "C" int foobarm(int a, A ap, int (A::*pf)(int a)) { return (ap.*pf)(a); } template T foo_T(T a) { return a; } template T foo_T(T a, T b) { return a + b; } template T foobar_T(T a, T (*pf)(T a)) { return pf(a); } template const T& ident(const T& x) { return x; } %} %template(foo_i) foo_T; %template(foobar_i) foobar_T; %template(foo_d) foo_T; %template(foobar_d) foobar_T; %template(ident_d) ident;