boost python - встраивание в c ++ и передача переменных - PullRequest
0 голосов
/ 25 февраля 2019

Введение

Я пытаюсь сделать простую вещь - теоретически, но пока не на практике.У меня есть консольное приложение C ++, со встроенным скриптом Python.Он должен передать некоторые переменные в python, выполнить вычисления и отправить его обратно.

Пример кода

мой файл cpp выглядит следующим образом (на основе THIS ответ):

#include <iostream>
#include <boost/python.hpp>

using namespace boost::python;

int main()
{
    int a = 2;
    int b = 3;

    Py_Initialize();
    try
    {
        object module = import("__main__");
        object name_space = module.attr("__dict__");
        exec_file("Script.py", name_space, name_space);

        object MyFunc = name_space["MyFunc"];
        object result = MyFunc(a,b);

        int sum = extract<int>(result["sum"]);
        std::cout << sum;
    }
    catch (error_already_set)
    {
        PyErr_Print();
    }

    Py_Finalize();
}

Мой файл Script.py очень прост

def MyFunc(a,b):
    result = a+b
    return result

Проблема

Я ожидал, чтоPython примет две переменные, суммирует их и позволяет извлечь их обратно, чтобы сделать мой C ++.Затем C ++ распечатывает результаты.Однако это заканчивается следующей ошибкой:

TypeError: 'int' object has no attribute '__getitem__'

Я думаю, что MyFunc (a, b) - неправильный вызов, однако я не могу понять, почему.Должен ли я передавать переменные другим способом?Если да, пожалуйста, объясните мне, как это сделать.

...