在Boost::Python中通过引用传递
想象一下这样的情况:
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++代码中最开始创建的Parameter实例。
但是,当这段代码执行完后,C++中的Parameter实例却没有任何变化!!!这意味着它是按值传递的(或者类似的方式 :S),而不是按引用传递的。但我明明是想让它按引用传递的……
我找不到关于Boost::Python中按引用传递的文档(虽然关于按引用返回的文档似乎有不少)。有没有人能给我一些提示或者指引呢?
1 个回答
2
Python没有引用的概念,所以当你把一个引用传给Python时,boost::python
会调用你对象的复制构造函数,也就是会创建一个对象的副本。
在这种情况下,你有两个选择:要么用指针(或者智能指针)来替代引用,要么把你自己定义的“智能引用”对象或包装器传给Python。