mirror of https://github.com/swig/swig
48 lines
1.0 KiB
OpenEdge ABL
48 lines
1.0 KiB
OpenEdge ABL
/* 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;
|
|
}
|
|
|
|
%}
|
|
|