使用 pybind11 从 python 中的 c++ 函数的指针参数中读取
read from pointer argument of a c++ function in python with pybind11
我有一个像这样的 C++ 函数:
int add(int *i, int j) {
*i += 3;
return *i + j;
}
我已经使用 pybind11 为它创建了 python 绑定作为
PYBIND11_MODULE(example, m) {
m.doc() = R"pbdoc(add)pbdoc";
m.def("add", &add, R"pbdoc(Add two numbers)pbdoc");
}
我在 python 中称它为:
>>import example
>>a=1
>>example.add(a,2)
>>6 --> This is correct
>>a
>>1 --> This is not what expect
是returns6,这是正确的
但是,当我打印 "a" 时,它仍然打印 1 而不是 4。
我如何修改 pybind11 定义,以便在 C++ 中对参数值所做的更改在 python
中可见
You cannot。您的变量 a
是对 常量 整数的引用。
在这种情况下,您必须重新绑定 对结果的引用:a = example.add(a, 2)
。或者,您可以将整数包装在可以变异的类型中。
我有一个像这样的 C++ 函数:
int add(int *i, int j) {
*i += 3;
return *i + j;
}
我已经使用 pybind11 为它创建了 python 绑定作为
PYBIND11_MODULE(example, m) {
m.doc() = R"pbdoc(add)pbdoc";
m.def("add", &add, R"pbdoc(Add two numbers)pbdoc");
}
我在 python 中称它为:
>>import example
>>a=1
>>example.add(a,2)
>>6 --> This is correct
>>a
>>1 --> This is not what expect
是returns6,这是正确的 但是,当我打印 "a" 时,它仍然打印 1 而不是 4。 我如何修改 pybind11 定义,以便在 C++ 中对参数值所做的更改在 python
中可见You cannot。您的变量 a
是对 常量 整数的引用。
在这种情况下,您必须重新绑定 对结果的引用:a = example.add(a, 2)
。或者,您可以将整数包装在可以变异的类型中。