Передача по ссылке в Boost :: Python - PullRequest
3 голосов
/ 17 марта 2010

Рассмотрим что-то вроде:

struct Parameter
{
    int a;
    Parameter(){a = 0;}
    void setA(int newA){a = newA;}
};
struct MyClass
{
    void changeParameter(Parameter &p){ p.setA(-1);}
};

Хорошо, давайте перенесемся вперед, и представьте, что я уже обернул эти классы, выставляя все на python, и представьте, что я создаю экземпляр объекта Parameter в коде C ++, который я передаю скрипту python, и этот скрипт python использует Объект MyClass для изменения экземпляра параметра I, созданного в начале кода C ++.

После того, как этот код выполняется, в C ++ экземпляр параметра не изменяется !!! Это означает, что он был передан по значению (или как-то так: S), а не по ссылке. Но я думал, что объявил, что это передано по ссылке ...

Кажется, я не могу найти документацию Boost :: Python о передаче по ссылке (хотя, похоже, достаточно документов для возврата по ссылке ...). Кто-нибудь может дать намек или указатель, пожалуйста?

1 Ответ

1 голос
/ 20 марта 2010

Python не имеет ссылок, поэтому при передаче ссылки на python boost::python вызывает copy-ctor вашего объекта.

В этом случае у вас есть два варианта: заменить ссылки на указатели (или smart-указатели) или передать в python свой собственный объект / оболочку 'smart-reference'.

...