diff --git a/Examples/test-suite/cpp11_function_objects.i b/Examples/test-suite/cpp11_function_objects.i index fb75edea6..e80f60a2f 100644 --- a/Examples/test-suite/cpp11_function_objects.i +++ b/Examples/test-suite/cpp11_function_objects.i @@ -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 std::function 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; } diff --git a/Examples/test-suite/python/cpp11_function_objects_runme.py b/Examples/test-suite/python/cpp11_function_objects_runme.py index aac7f9c5f..5a63b632b 100644 --- a/Examples/test-suite/python/cpp11_function_objects_runme.py +++ b/Examples/test-suite/python/cpp11_function_objects_runme.py @@ -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))