C インターフェイスの Python 実装を既存の C プログラムに統合し、Python 実装で次のことを可能にします。
次の C インターフェイスを考えてみましょう。定義:
class myif {
public:
virtual float myfunc(float a) = 0;
};
SWIG でポリモーフィズムを有効にする:
%module(directors="1") module %include "myif.h"
Python 実装の作成:
import module
class MyCl(module.myif):
def __init__(self):
module.myif.__init__(self)
def myfunc(self, a):
return a * 2.0
Python の初期化(main.cc):
Py_Initialize();
Python モジュールのインポート:
PyObject *module = PyImport_Import(PyString_FromString("mycl"));
インスタンスの作成と関数の実行:
PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict);
double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));
ファイナライズ:
Py_Finalize();
SWIG ランタイムの公開:
swig -Wall -c -python -external-runtime runtime.h
SWIG を再コンパイルするモジュール:
g -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
ヘルパー関数変換:
myif *python2interface(PyObject *obj) {
...
}
int main() {
...
myif *inst = python2interface(instance);
std::cout myfunc(input) これらの手順に従うことで、C インターフェイスの Python 実装を正常に実装し、より大きな C プログラムにシームレスに統合して、柔軟性と拡張性を高めることができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3