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:
commit
abcb656b51
2 changed files with 23 additions and 6 deletions
|
|
@ -3,25 +3,31 @@
|
||||||
Function objects are objects which overload the operator() function.
|
Function objects are objects which overload the operator() function.
|
||||||
The std::function does not provide any seamless support in the target languages yet.
|
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();
|
%rename(__call__) Test::operator();
|
||||||
|
|
||||||
|
%feature("director") Test;
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
struct Test {
|
class Test {
|
||||||
|
public:
|
||||||
int value;
|
int value;
|
||||||
|
|
||||||
void operator()(int x, int y) {
|
virtual void operator()(int x, int y) {
|
||||||
value=x+y;
|
value=x+y;
|
||||||
}
|
}
|
||||||
Test() : value(0) {}
|
Test() : value(0) {}
|
||||||
} test;
|
virtual ~Test() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
Test test;
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
std::function<void ( int, int )> pF = test;
|
std::function<void ( int, int )> pF = test;
|
||||||
|
|
||||||
int testit1(Test new_test, int a, int b) {
|
int testit1(Test &new_test, int a, int b) {
|
||||||
pF = new_test;
|
pF = std::ref(new_test);
|
||||||
pF(a, b);
|
pF(a, b);
|
||||||
return new_test.value;
|
return new_test.value;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,13 @@
|
||||||
import cpp11_function_objects
|
import cpp11_function_objects
|
||||||
import sys
|
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()
|
t = cpp11_function_objects.Test()
|
||||||
if t.value != 0:
|
if t.value != 0:
|
||||||
raise RuntimeError("Runtime cpp11_function_objects failed. t.value should be 0, but is " + str(t.value))
|
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:
|
if t.value != 3:
|
||||||
raise RuntimeError("Runtime cpp11_function_objects failed. t.value not changed - should be 3, but is " + str(t.value))
|
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))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue