私が理解している限り、メモリ共有のために、ベクトル[T]を返すC++関数をPythonで公開することはできません限界。 したがって、インポートされた関数を使用し、Python拡張モジュールに適切に公開する2番目の関数を作成する必要があります。同じ名前で直接公開することができないC++関数を公開する方法
問題:私は同じ関数名を使用できません。拡張モジュールには多くの関数名が付いています。例えば。 、以下のC++関数のインポートを参照してください、そして公開:
cdef extern from "somestuffs.h" namespace "stf":
cdef vector[float] stufffn(int n)
cpdef np.ndarray[np.float64_t, ndim=1] pystufffn(int n):
return np.asarray(stufffn(n))
addhoc機能なしstufffn直接機能を公開する方法はありますか? 拡張子に "stufffn"という名前を保存して "pystufffn"を避ける方法はありますか?
私は既存のライブラリのラッパーを構築しているので、私は現状のコードの名前を変更できないことに注意してください。
お返事ありがとうございます。
[はい、あなたがC++関数からのpythonにベクトルを返すことができpython.AndにC++のクラスや関数を公開するためにブーストのpythonを使用することができます。あなただけがベクトル型をPythonモジュールに公開する必要があります。 – sagar
私は今、ブーストのpythonを発見している、素晴らしいです。 最後の2つの文のポインタ/参照/例はありますか? – GDegottex
pybind11も参照してください。本質的にBoost.Pythonの最新バージョン(C++ 11を活用しています)https://pybind11.readthedocs.io/en/stable/intro.html – chrisb