【问题标题】:How do I call a python function in C++ using SWIG?如何使用 SWIG 在 C++ 中调用 python 函数?
【发布时间】:2023-04-07 17:47:01
【问题描述】:

我有一个如下C++

class myfun{
public:
    virtual double eval(arma::vec& x){};
};

double op(myfun* f, arma::vec& x){
    return f->eval(x);
}

arma::vec 是一个犰狳 c++ 向量,我使用 armanpy.i 将 numpy 数组转换为 arma::vec 对象,反之亦然。

在启用 swig 导向器并为上述 C++ 代码创建 SWIG 接口后,我创建了一个 python 类,它重新定义了 eval 虚拟方法:

class f(mymodule.myfun):
    def __init__(self):
        super(f,self).__init__()
    def eval(self,x):
        print x
        return 3.14

在python中,我先创建了一个f的实例,它继承了myfun:

b = f()

然后,我将其传递给op

mymodule.op(b,array([3.,4.]))

哪个输出

<Swig Object of type 'arma::vec *' at 0x10e6dcc30>
3.14

Python 没有将 arma::vec * 解释为一个 numpy 数组,我认为它是在 armanpy.i 文件中执行的。有任何想法吗?我没有与 arma::vec 结婚,我可以用一个 numpy 向量替换 arma::vec。

谢谢!

【问题讨论】:

    标签:
    python
    c++
    numpy
    swig
    armadillo