メインファイル(main.cpp)とヘッダーファイル(nodes.hpp)があります。メインファイルはN(任意の正の整数)を入力引数として取り、ヘッダーファイルの関数を使用して、出力に 'x&y'(両方ともdouble)を与えます。
注:
私はpythonラッパーを作成する必要があります。pythonの実用的な知識がありますが、ラッパーを使用したことがありません。
そのようなコードでpython wrpperを使用することについて、誰かが参照したりメモを付けたりできますか?
Boost.Pythonを使用します。これは以前のSO Docs。
Boost.Pythonを使用
PythonプロジェクトでC++ライブラリを使用する必要がある場合、事は簡単です。Boostを使用するだけです。
まず最初に、必要なコンポーネントのリストを示します。
小さなC++ファイルから始めましょう。私たちのC++プロジェクトには、「これが最初の試みです」という文字列を返すメソッドが1つだけあります。それを呼び出すCppProject.cpp
char const *firstMethod() {
return "This is the first try.";
}
BOOST_PYTHON_MODULE(CppProject) {
boost::python::def("getTryString", firstMethod); // boost::python is the namespace
}
以下にCMakeLists.txtファイルを用意します。
cmake_minimum_required(VERSION 2.8.3)
FIND_PACKAGE(PythonInterp)
FIND_PACKAGE(PythonLibs)
FIND_PACKAGE(Boost COMPONENTS python)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
PYTHON_ADD_MODULE(NativeLib CppProject)
FILE(COPY MyProject.py DESTINATION .) # See the whole tutorial to understand this line
チュートリアルのこの部分では、すべてがとても簡単です。 pythonプロジェクトでライブラリをインポートしてメソッドを呼び出すことができます。pythonプロジェクトを呼び出しますMyProject.py。
import NativeLib
print (NativeLib.getTryString)
プロジェクトを実行するには、以下の手順に従ってください:
cmake -DCMAKE_BUILD_TYPE=Release ..
make
python MyProject.py
。ここで、C++プロジェクトのメソッドが返す文字列を確認する必要があります。オプションは次のとおりです。
ctypes を使用できます。これは、Pythonだけでなく、他のソフトウェアからも呼び出せる共有ライブラリにプログラムを変換するので、これが最もクリーンな解決策であると考えています。ただし、プログラムのCインターフェースを自分で作成する必要があります。
Python C-Extension を使用できます。これは非常に低レベルであり、メモリリークが発生しやすく、1つの関数を実装するのに多くの時間を要し、Pythonバージョンであるため、これを最悪の解決策と見なします依存。基本的に、これはC++内でPythonインタプリタを開始するのに適しています。PyObjects(Pythonタイプの主要なビルディングブロック)を作成して、それらはインディーC/C++です。
[〜#〜] swig [〜#〜] を使用できます。この場合、定義したインターフェイスファイルを通じて、ctypesで作成する必要のあるインターフェイスが自動的に作成されます。人々はそれはとても良いと言いますが、ドキュメントはそれほど良くありません。
Boost.Python を使用できますが、これは優れていますが、bjamを使用した非常に醜いビルドシステムです。これをバイパスすることができれば、ctypesよりも優れています。私は大きな後押しファンですが、bjamは私がこれを使用しない理由です。
私が通常行うことはctypesです。 単一の責任の原則 を強調しているので、私はそれを信頼しています。ライブラリには、インターフェイス(Cインターフェイス)とは別のジョブがあります。これは、そのインターフェイスを使用し、「簡単な機能」をユーザーに公開するPythonスクリプトからも分離されています。
C++ラッパー生成のための別のツールは [〜#〜] clif [〜#〜] です。 2017年にリリースされたGoogleは、最近このほとんどすべてにこれを使用しています。 Python内部で新しいSWIGラッパーを作成することはできなくなりました。
これはC++解析のためにClangの上に構築されており、SWIGの「サポート」を介して自分自身を撃ち抜こうとするのではなく、比較的慣用的な最新のC++ APIの使用(当然ながら Googleのスタイルガイド )を必要とします。すべての貧弱な」アプローチ。
公式ドキュメントで試してください:
https://docs.python.org/2/extending/extending.html
このリンクは、cppモジュールをインクルードし、pythonインタープリターから使用する方法の簡単な例を提供します。または、これが可能な場合は、Cythonで試してください: http:// cython。 org /
Cythonを使用すると、CライクなPythonライクなコードを記述でき、CPPコンパイルに変換され、Pythonから簡単にアクセスできるようになります。