簡體   English   中英

如何使用 SWIG 在 C++ 中調用 python 函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM