考虑类似的事情:
struct Parameter
{
int a;
Parameter(){a = 0;}
void setA(int newA){a = newA;}
};
struct MyClass
{
void changeParameter(Parameter &p){ p.setA(-1);}
};
好吧,让我们快进,想象一下我已经包装了那些类,将所有内容暴露给python,并想象我还在C ++代码中实例化了一个Parameter对象,我将它传递给python脚本,而python脚本使用了MyClass对象用于修改在C ++代码开头创建的参数I的实例。
执行该代码后,在C ++中参数实例不变!!!这意味着它是通过值(或类似的东西:S)传递的,而不是通过引用传递的。但我以为我宣称它是通过引用传递的......
我似乎无法找到关于通过引用传递的Boost :: Python文档(尽管似乎有足够的文档关于通过引用返回...)。请问有人可以提供一些提示或指针吗?
答案 0 :(得分:1)
Python没有引用,因此当您传递对象的boost::python
调用copy-ctor
的引用时。
在这种情况下,您有两种选择:使用指针(或智能指针)替换引用或将python传递给您自己的'智能引用'对象/包装器。