Merge branch 'diorcety-cpp11_director_function_python'

* diorcety-cpp11_director_function_python:
  Correct cpp11_function_objects testcase
  Improve cpp11_function_objects test for python
This commit is contained in:
William S Fulton 2014-10-13 19:39:59 +01:00
commit abcb656b51
2 changed files with 23 additions and 6 deletions

View file

@ -3,25 +3,31 @@
Function objects are objects which overload the operator() function.
The std::function does not provide any seamless support in the target languages yet.
*/
%module cpp11_function_objects
%module(directors="1") cpp11_function_objects
%rename(__call__) Test::operator();
%feature("director") Test;
%inline %{
struct Test {
class Test {
public:
int value;
void operator()(int x, int y) {
virtual void operator()(int x, int y) {
value=x+y;
}
Test() : value(0) {}
} test;
virtual ~Test() {}
};
Test test;
#include <functional>
std::function<void ( int, int )> pF = test;
int testit1(Test new_test, int a, int b) {
pF = new_test;
int testit1(Test &new_test, int a, int b) {
pF = std::ref(new_test);
pF(a, b);
return new_test.value;
}

View file

@ -1,6 +1,13 @@
import cpp11_function_objects
import sys
class Test1(cpp11_function_objects.Test):
def __init__(self):
cpp11_function_objects.Test.__init__(self)
def __call__(self, a, b):
self.value = a * b
t = cpp11_function_objects.Test()
if t.value != 0:
raise RuntimeError("Runtime cpp11_function_objects failed. t.value should be 0, but is " + str(t.value))
@ -10,3 +17,7 @@ t(1,2) # adds numbers and sets value
if t.value != 3:
raise RuntimeError("Runtime cpp11_function_objects failed. t.value not changed - should be 3, but is " + str(t.value))
t2 = Test1()
a = cpp11_function_objects.testit1(t2, 4,3)
if a != 12:
raise RuntimeError("Runtime cpp11_function_objects failed. t.value not changed - should be 12, but is " + str(a))