2010-03-17 26 views
3

考虑是这样的:通在加速参考:: Python的

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

好吧,让我们快进和想象我已经做完这些类,揭露一切蟒蛇,和想象也是我实例参数的对象在C++代码,这是我传递给python脚本,以及Python脚本使用MyClass的对象修改我在C++代码开始时创建参数的实例。

该代码执行后,在C++ Parameter实例是不变!!!这意味着它通过价值传递(或类似的东西:S),而不是通过引用。但我认为,我宣布它通过引用传递...

我似乎无法找到有关通过引用传递的boost :: Python文档(虽然似乎是有关参考返回足够的文档......) 。任何人都可以提供一些提示或指针吗?

+2

在您的构造函数中为Parameter添加分号后,此测试代码对我来说工作正常:http://www.pastie.org/873263 – 2010-03-17 03:41:22

+1

@Goose,问题是关于从Python使用此代码,而不是从C++使用。 – 2010-03-17 17:50:23

+0

@Barry mhm。这只是一个很快成型的例子。 – Fabzter 2010-03-18 04:01:36

回答

1

Python没有引用,所以当你通过引用python boost::python调用copy-ctor你的对象。

在这种情况下,您有两种选择:用指针(或智能指针)替换引用将您自己的'智能引用'对象/包装器传递给python。

+0

在我的项目,我通过创建不复制拷贝构造函数数据,但共享一个指向数据的智能向量解决同样的问题。 – W55tKQbuRu28Q4xv 2010-03-20 14:53:38

+0

谢谢!我帮忙,但我认为python管理一切与参考? – Fabzter 2010-03-21 00:58:01

+0

可能是我很喜欢的C++指针,而不是引用错误的,但蟒蛇引用。 – W55tKQbuRu28Q4xv 2010-03-21 07:43:36