如何在 python 中取消引用 swig float 引用?

发布于 2024-12-28 03:06:46 字数 449 浏览 0 评论 0原文

我使用 C++ 和 swig 来做一些计算。为了简化它,我们假设它看起来像这样:

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

现在我想使用 getIt() 函数并打印浮点值。

对于

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

I get

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

这是有道理的,因为 getIt 返回一个引用。我怎样才能取消引用它/从中得到一个Python浮点(不改变C++代码)?

I use C++ and swig to do some calculations. To simplify it, lets assume it looks like this:

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

Now I want to use the the getIt() function and print the float value.

With

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

I get

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

which makes sense, because getIt returns a reference. How can I dereference it/get a python float out of it (without changing the c++ code)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

转角预定愛 2025-01-04 03:06:46

看看这里此处。您可以在 SWIG 模块中编写类似以下内容:

%pointer_class(float, floatp)

这将允许您在 Python 代码中执行此操作:

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

您将需要更改 SWIG 模块,或者如果您直接使用 C++ 头文件,则编写一个模块。但是您可能只需从那里包含您的 C++ 头文件就可以逃脱惩罚。

Have a look here and here. You'd write something like this in your SWIG module:

%pointer_class(float, floatp)

That will let you do this in your Python code:

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

You will need to change your SWIG module, or write one if you are swigging the C++ header file directly. But you can probably get away with simply including your C++ header from there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文