Boost.PythonでC++からPythonの関数を呼び出す

最終更新: 2017-09-23 23:45

環境構築

sudo apt-get install libboost-python libboost-python-dev

コード例

C++

#include <iostream>
#include <string>
#include <fstream>
#include <streambuf>
#include <boost/python.hpp>
#include <string>


int main() {
    Py_Initialize();

    auto main_ns = boost::python::import("__main__").attr("__dict__");

    try {
        std::ifstream ifs("test.py");
        std::string script((std::istreambuf_iterator<char>(ifs)),
                            std::istreambuf_iterator<char>());
        boost::python::exec(script.c_str(), main_ns);
        boost::python::object func = main_ns["func"];
        boost::python::object result = func(1.0);
        std::cout <<  boost::python::extract<double>(result) << std::endl;
    }
    catch (boost::python::error_already_set) {
        PyErr_Print();
    }
}

Python

def func(n):
    return 2 * n

コンパイル

g++ test.cpp -std=c++11 -lboost_python `python-config --cflags` `python-config --ldflags`

実行結果

2

参考