чтение из аргумента указателя функции c ++ в python с pybind11 - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть функция c ++, такая как:

int add(int *i, int j) {
    *i += 3;
    return *i + j;
}

Я создал для нее привязку к Python, используя pybind11 как

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

Возвращает 6, что правильно. Однако, когда я печатаю «а», он все равно печатает 1 вместо 4. Как я могу изменить определение pybind11, чтобы изменения в значении аргумента внутри C ++ были видны в python

1 Ответ

0 голосов
/ 18 декабря 2018

Вы не можете .Ваша переменная a является ссылкой на константу целое число.

В этом случае вы должны перепривязать ссылку на результат: a = example.add(a, 2).Кроме того, вы можете обернуть целое число в тип, который вы можете изменить.

...