/* This testcase checks whether SWIG correctly parses function objects and the templates for the functions (signature). Function objects are objects which overload the operator() function. The std::function does not provide any seamless support in the target languages yet. */ %module(directors="1") cpp11_function_objects %rename(__call__) Test::operator(); %feature("director") Test; /* We had to rename this in the C++ API being wrapped due to a collision with * a value typedef in newer ocaml headers, so use %rename to avoid having to * update all the runme files which use it. */ %rename(value) Test::the_value; %inline %{ class Test { public: int the_value; virtual void operator()(int x, int y) { the_value=x+y; } Test() : the_value(0) {} virtual ~Test() {} }; Test test; #include std::function pF = test; int testit1(Test &new_test, int a, int b) { pF = std::ref(new_test); pF(a, b); return new_test.the_value; } int testit2(int a, int b) { test(a, b); return test.the_value; } %}