Better clarification about polymorphic wrappers for function objects - std::function

This commit is contained in:
William S Fulton 2013-02-01 19:17:21 +00:00
commit a043b55b69
3 changed files with 48 additions and 13 deletions

View file

@ -1,18 +1,35 @@
/* 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. */
Function objects are objects which overload the operator() function.
The std::function does not provide any seamless support in the target languages yet.
*/
%module cpp0x_function_objects
%inline %{
//function<int ( int, int )> pF; // not supported yet by the compiler
%rename(__call__) Test::operator();
%inline %{
struct Test {
int value;
void operator()(short x, short y) {
value=10;
void operator()(int x, int y) {
value=x+y;
}
Test() : value(0) {}
} test;
#include <functional>
std::function<void ( int, int )> pF = test;
int testit1(Test new_test, int a, int b) {
pF = new_test;
pF(a, b);
return new_test.value;
}
int testit2(int a, int b) {
test(a, b);
return test.value;
}
%}

View file

@ -3,10 +3,10 @@ import sys
t = cpp0x_function_objects.Test()
if t.value != 0:
raise RuntimeError,"Runtime cpp0x_function_objects failed. t.value should be 0, but is", t.value
raise RuntimeError("Runtime cpp0x_function_objects failed. t.value should be 0, but is " + str(t.value))
t(1,2) # sets value
t(1,2) # adds numbers and sets value
if t.value != 10:
raise RuntimeError,"Runtime cpp0x_function_objects failed. t.value not changed - should be 10, but is", t.value
if t.value != 3:
raise RuntimeError("Runtime cpp0x_function_objects failed. t.value not changed - should be 3, but is " + str(t.value))