如何在Python中解引用SWIG浮点引用?

0 投票
1 回答
2772 浏览
提问于 2025-04-17 10:46

我在用C++和swig做一些计算。为了简单起见,假设代码看起来是这样的:

struct TestIt{
  TestIt(float x):x(x){};
  inline float& getIt() {return x;};
  float x;
};

现在我想使用 getIt() 这个函数,并打印出浮点数的值。

用下面的代码:

testee = matching.TestIt(42)
print(testee.getIt())

我得到的结果是:

<Swig Object of type 'float *' at 0x1cb1690>

这个结果是合理的,因为getIt返回的是一个引用。那么我该如何解引用,或者说如何从中获取一个Python的浮点数(而不改变C++的代码)呢?

1 个回答

1

你可以看看这里这里。在你的SWIG模块中,你需要写类似下面的代码:

%pointer_class(float, floatp)

这样你就可以在你的Python代码中做这些事情:

print(testee.getIt().value())

你可能需要修改你的SWIG模块,或者如果你直接在使用C++的头文件,可能需要自己写一个模块。不过,你也可以尝试直接在这里包含你的C++头文件,这样可能就能解决问题。

撰写回答