问题是如下。
说,我有一个通过 Boost.Python 向Python公开的类Matrix
。
现在,这是另一个类Calcs
:
class Calcs
{
public:
Matrix* x;
Matrix* res;
Calcs(){ x = NULL; res = NULL; }
void set_x(Matrix& x_){ x = &x_; }
void set_res(Matrix& res_){ res = &res_; }
void run_calc(){ *res = *x; }
Matrix get_res(){ return *res; }
};
Python的用法是:
x = Matrix(2,2) # this will allocate memory for the matrix x
y = Matrix(2,2) # same for y
c = Calcs()
c.set_x(x) # so now the internal pointer of the c object points to the
# location of the object x
c.set_res(y) # same for y
c.run_calc() # so now, we should be able to look at the object y and find
# the result stored in it, but it reality this object
# is not actually changed
c.get_res() # this will give the answer as expected
正如Python脚本的注释所示,使用模式是在外部对象中分配内存(输入和结果),然后使Calcs
对象中的指针指向这些位置,运行计算,然后在y
中准备好结果。但不知怎的,这不起作用,我很难理解为什么。
好的一面是,每当我更新输入矩阵x
并使用函数get_res()
返回结果时,结果每次都会更新,因此会更新x
的值。
尽管如此,矩阵y
并未改变其内容。我认为Python可能正在创建一些中间对象,所以当我在C ++中更新y时,只有那个中间对象看到变化,这就是对象{{1没有更新。
所以,我想知道这是否正确理解以及我如何解决这个问题。