我正在使用 SWIG 链接我的 CPP API 和 Python API
我在我的 .i 文件中创建了一个简单的回调类,我在我的 .py 文件中继承了它, 但是当我将 python 创建的类作为指针传递时,不会调用重写的函数, 这是代码:
//example.i
%module(directors="1") example
%inline %{
class CBack {
public:
virtual int operator()(int x, int y) const {
return x+y;
}
virtual int handle(int x, int y)
{
return -1;
}
virtual ~CBack() {}
};
int callF(CBack* f, int xv, int yv)
{
return f->handle(xv, yv);
}
%}
%feature("director") CBack;
//example.py
class Mul(example.CBack):
@override
def handle(self, x: int, y: int) -> int:
return x * y
print(example.callF(Mul(), 3, 7)) //print -1 but should print 21
print(str(Mul().handle(3,7))) // print 21
我附上了显示我尝试过的代码, 我希望调用已调度的调用
%feature("director") CBack;
必须在处理代码之前声明。将它移到代码的前面:
// example.i
%module(directors="1") example
%feature("director") CBack;
%inline %{
class CBack {
public:
virtual int operator()(int x, int y) const {
return x+y;
}
virtual int handle(int x, int y)
{
return -1;
}
virtual ~CBack() {}
};
int callF(CBack* f, int xv, int yv)
{
return f->handle(xv, yv);
}
%}
# test.py
import example
class Mul(example.CBack):
def handle(self, x: int, y: int) -> int:
return x * y
print(example.callF(Mul(), 3, 7))
print(str(Mul().handle(3,7)))
输出:
21
21