作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在实现 particle physics library名为 LCIO 的 C++ 代码,但有一个名为 pyLCIO 的 python 包装器。
当尝试运行名为 setMomentum()
的函数时,C++ 实现如下所示:
void setMomentum (const float p[3])
简单的 float 组。
好的 python,让我们试试这个:
particle.setMomentum([1.0,2.0,3.0])
现在这引发了一个错误。这是回溯:
Traceback (most recent call last):
File "driver.py", line 5, in <module>
particle.setMomentum(momentum)
File "/path/to/pyLCIO/base/HandleExceptions.py", line 17, in wrappedMethod
return method(*args, **kargs)
TypeError: none of the 2 overloaded methods succeeded. Full details:
void MCParticleImpl::setMomentum(const float* p) =>
could not convert argument 1
void MCParticleImpl::setMomentum(const double* p) =>
could not convert argument 1
现在这个函数要求一个#1 常量,#2 对数组头部的引用。我应该如何使用 Python 执行此操作?
有没有用过 python 包装 C++ 代码的人知道如何在 python 中创建 const float*
?
感谢您的帮助。
我试过:
particle.setMomentum((1.0,2.0,3.0))
无果;同样的错误。
最佳答案
基于 http://lcio.desy.de/v01-07/src/python/lcio_swig.i ,看起来他们使用元组而不是数组来表示 3 元素 vector 。
您应该能够执行“particle.setMomentum((1.0, 2.0, 3.0))”之类的操作并使其正常工作。同样,getMomentum 将返回一个 3 元素元组。
关于python - pyLCIO setMomentum : error const float* in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49270010/
上下文: 我正在实现 particle physics library名为 LCIO 的 C++ 代码,但有一个名为 pyLCIO 的 python 包装器。 当尝试运行名为 setMomentum(
我是一名优秀的程序员,十分优秀!