3

考虑类似的事情:

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++ 中的参数实例不变!!!这意味着它是通过值(或类似的东西:S)而不是通过引用传递的。但我以为我声明它是通过引用传递的......

我似乎找不到关于通过引用传递的 Boost::Python 文档(尽管似乎有足够多的关于通过引用返回的文档......)。任何人都可以给一些提示或指针吗?

4

1 回答 1

1

Python 没有引用,因此当您将引用传递给对象的 Pythonboost::python调用copy-ctor时。

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

于 2010-03-20T14:51:59.603 回答