「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ インターフェイスを Python に公開して実装するにはどうすればよいですか?

C++ インターフェイスを Python に公開して実装するにはどうすればよいですか?

2024 年 11 月 19 日に公開
ブラウズ:395

How can I expose a C   interface to Python for implementation?

実装のために C インターフェイスを Python に公開する

目的

C インターフェイスの Python 実装を既存の C プログラムに統合し、Python 実装で次のことを可能にします。

インターフェイス定義

次の C インターフェイスを考えてみましょう。定義:

class myif {
public:
  virtual float myfunc(float a) = 0;
};

Python でのインターフェイスのインポートと拡張

  1. SWIG でポリモーフィズムを有効にする:

    %module(directors="1") module
    
    %include "myif.h"
  2. Python 実装の作成:

    import module
    
    class MyCl(module.myif):
      def __init__(self):
        module.myif.__init__(self)
      def myfunc(self, a):
        return a * 2.0

C への Python の埋め込み

  1. Python の初期化(main.cc):

    Py_Initialize();
  2. Python モジュールのインポート:

    PyObject *module = PyImport_Import(PyString_FromString("mycl"));
  3. インスタンスの作成と関数の実行:

    PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict);
    double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));
  4. ファイナライズ:

    Py_Finalize();

Python オブジェクトを C に変換するポインター

  1. SWIG ランタイムの公開:

    swig -Wall -c   -python -external-runtime runtime.h
  2. SWIG を再コンパイルするモジュール:

    g   -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
  3. ヘルパー関数変換:

    myif *python2interface(PyObject *obj) {
      ...
    }

main.cc での最終実装

int main() {
  ...
  myif *inst = python2interface(instance);
  std::cout myfunc(input) 

これらの手順に従うことで、C インターフェイスの Python 実装を正常に実装し、より大きな C プログラムにシームレスに統合して、柔軟性と拡張性を高めることができます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3