[英]How do I call a python function in C++ using SWIG?
我有以下 C++
class myfun{
public:
virtual double eval(arma::vec& x){};
};
double op(myfun* f, arma::vec& x){
return f->eval(x);
}
其中arma::vec
是 armadillo c++ 向量,我使用 armanpy.i 將 numpy 數組轉換為 arma::vec 對象,反之亦然。
在啟用 swig 控制器並為上述 C++ 代碼創建一個 SWIG 接口后,我創建了一個重新定義了 eval 虛擬方法的 python 類:
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。
謝謝!
在您的情況下,請查看提供 armadillo SWIG 文件的armanpy 。
您可以使用 Github 上的此存儲庫完成此操作,該存儲庫使用了 armanpy 和 armadillo 8.500.1
https://github.com/Wolframm74/armadillo_armanpy/blob/master/README.md
從按照步驟編譯代碼開始,然后在示例的基礎上進行構建。 它有關於如何通過 SWIG 將 python 的 numpy 數組轉換為犰狳數組的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.