考虑以下最简单的例子:我有一个C++函数'myfun',它接受一个数字和另一个函数作为输入,并返回在x处评估的函数:
``` double myfun(double x, double (*f)(double y)) { return f(x); } ```
我将这段代码存储在“test.cpp”中。相应头文件“test.hpp”的代码非常简单:
``` double myfun(double x, double (*f)(double y)); ```
现在,我尝试使用SWIG从Python访问“myfun”。'swig.i'文件如下所示:
``` %module test %{ #include "test.hpp" %} double myfun(double x, double (*f)(double y)); ```
每当我尝试在Python中调用此函数时,例如:
``` from test import myfun myfun(2, lambda y: y**2) ```
我会收到以下错误:
``` in method 'myfun', argument 2 of type 'double (*)(double)' ```
所以我的问题很简单:如何修改“swig.i”文件,以便我可以将任何(适合的Python)函数传递给“myfun”?(这个问题与此帖子如何使用SWIG在Python中包装接受函数指针的c++函数有些相关,但不同之处在于这里我没有在C++中指定输入函数,而是想将其保留为自由的“参数”)。
``` double myfun(double x, double (*f)(double y)) { return f(x); } ```
我将这段代码存储在“test.cpp”中。相应头文件“test.hpp”的代码非常简单:
``` double myfun(double x, double (*f)(double y)); ```
现在,我尝试使用SWIG从Python访问“myfun”。'swig.i'文件如下所示:
``` %module test %{ #include "test.hpp" %} double myfun(double x, double (*f)(double y)); ```
每当我尝试在Python中调用此函数时,例如:
``` from test import myfun myfun(2, lambda y: y**2) ```
我会收到以下错误:
``` in method 'myfun', argument 2 of type 'double (*)(double)' ```
所以我的问题很简单:如何修改“swig.i”文件,以便我可以将任何(适合的Python)函数传递给“myfun”?(这个问题与此帖子如何使用SWIG在Python中包装接受函数指针的c++函数有些相关,但不同之处在于这里我没有在C++中指定输入函数,而是想将其保留为自由的“参数”)。