Pybind11: обратный вызов Python и аргумент C ++C++

Программы на C++. Форум разработчиков
Anonymous
Pybind11: обратный вызов Python и аргумент C ++

Сообщение Anonymous »

Я работаю над привязками Python моей библиотеки C ++ (решатель математической оптимизации), и я застрял в точке, где я создаю обратный вызов Python evaluate_constraints () , который принимает аргументы C ++, передаю его в библиотеку C ++ и оцениваю его с аргументами C ++. Обратный вызов изменяет свои вторые ограничения параметров на основе его первого параметра x .

Код: Выделить всё

// C++ code
#include "Vector.hpp"
#include 
namespace py = pybind11;

void solve(const std::function& evaluate_constraints) {
const Vector x = ...;
Vector constraints = ...;
evaluate_constraints(x, constraints);
}

PYBIND11_MODULE(unopy, module) {
py::class_(module, "Vector")
.def(py::init(), "Constructor")
.def("__getitem__", [](const Vector& vector, size_t index) {
return vector[index];
})
.def("__setitem__", [](Vector& vector, size_t index, double value) {
vector[index] = value;
});
module.def("solve", &solve);
}
< /code>
# Python code
import myCppModule

def evaluate_constraints(x, constraints):
constraints[0] = function of x
constraints[1] = function of x
...

myCppModule.solve(evaluate_constraints)
К сожалению, какая -то копия должна где -то произойти, потому что ограничения объекта C ++ не изменяются. Я не уверен, пропустил ли я что -то совершенно очевидное (я наткнулся на предложения, чтобы использовать py :: return_value_policy :: reference_internal , но безрезультатно) или действительно немного сложно. Тип.


Подробнее здесь: https://stackoverflow.com/questions/796 ... c-argument

Вернуться в «C++»