| /* 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 <functional> |
| std::function<void ( int, int )> 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; |
| } |
| |
| %} |
| |