Pybind11: Python Callback und C ++ ArgumentC++

Programme in C++. Entwicklerforum
Anonymous
 Pybind11: Python Callback und C ++ Argument

Post by Anonymous »

Ich arbeite an Python -Bindungen meiner C ++ -Bibliothek (ein mathematischer Optimierungslöser) und ich stecke an einem Punkt fest, an dem ich einen Python -Callback evaluate_constraints () erstelle, der C ++ - Argumente übergibt, an die C ++ - Bibliothek übergibt und mit C ++ - Argumente bewertet. Der Rückruf modifiziert seine zweiten Parameterbeschränkungen basierend auf seinem ersten Parameter x .

Code: Select all

// 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)
Leider muss irgendwo eine Kopie stattfinden, da die C ++ - Objektbeschränkungen nicht geändert werden. Ich bin mir nicht sicher, ob ich etwas völlig Offensichtliches verpasst habe (ich bin auf Vorschläge gestolpert, Py :: return_value_policy :: reference_internal zu verwenden, aber ohne Erfolg) oder ob es tatsächlich ein bisschen schwierig ist, zu adressieren. Typ.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post