boost
boost.pythonの使用
サーチ…
Boost.Pythonの入門例
PythonプロジェクトでC ++ライブラリを使用する必要がある場合は簡単です。 Boostを使うことができます。
まず最初に、必要なコンポーネントの一覧を示します。
- CMakeを使用するので、CMakeList.txtファイル。
- C ++プロジェクトのC ++ファイル。
- pythonファイル - これはあなたのpythonプロジェクトです。
小さな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)
プロジェクトを実行するには、以下の手順に従ってください:
- buildという名前のディレクトリを作成します。
- そのディレクトリに入力します。
-
cmake -DCMAKE_BUILD_TYPE=Release ..コマンドをcmake -DCMAKE_BUILD_TYPE=Release .. -
make -
python MyProject.py。これで、C ++プロジェクトのメソッドが返す文字列を確認する必要があります。
boost.pythonのstd :: vectorのラッピング
関数がstd::vector型を返し、それが直接Pythonに公開されている場合
std::vector<float> secondMethod() {
return std::vector<float>();
}
BOOST_PYTHON_MODULE(CppProject) {
boost::python::def("getEmptyVec", secondMethod);
}
関数が呼び出されるとPythonは、Pythonがstd::vectorを処理する方法を知っておく必要があるためNo to_python (by-value) converter found for C++ type: std::vector<float, std::allocator<float> > std::vector 。
幸いboost.pythonは、米国のラッパーfuncitonを提供してきましたvector_indexing_suite.hpp 。戻り値は、対応するラッパー関数を次のように公開することによって、要素が[]演算子によってアクセスできるFloatVecオブジェクトとして扱うことができます。
std::vector<float> secondMethod() {
return std::vector<float>();
}
BOOST_PYTHON_MODULE(CppProject) {
// wrapper function
class_<std::vector<float> >("FloatVec")
.def(vector_indexing_suite<std::vector<float> >());
boost::python::def("getEmptyVec", secondMethod);
}
結果は、 list()とnumpy.asarray()呼び出すだけで、さらにPythonリストまたはNumpy配列に変換できます。