【发布时间】:2017-06-01 12:00:25
【问题描述】:
我有一个 c++ 类 myClass,我正在尝试创建一个基于 numpy 数组的创建者。
这是定义 new_ python 创建者的包装器,以 PyObject 作为参数:
class myClassPyWrapper : public QObject {
Q_OBJECT
public slots:
/*... many other creators here ...*/
myClass* new_myClass(PyObject* my_py_obj){
if (PyArray_Check(my_py_obj)) {
//do something
}
return nullptr;
}
}
但是当我键入时,不会从 Python 中调用创建者:
a=np.array(np.zeros(100)).reshape(10,10)
b=myClass(a)
我明白了:
py> a=np.array(np.zeros(100)).reshape(10,10)
py> b=myClass(a)
Traceback (most recent call last):
File "<string>", line 1, in <module>
ValueError: Could not find matching overload for given arguments:
(array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]),)
The following slots are available:
myClass() -> myClass
myClass(PyObject my_py_obj) -> myClass
myClass(myClass) -> myClass
myClass(int, int) -> myClass
myClass(int, int, double val) -> myClass
myClass(int, int, double val, QString name) -> myClass
myClass(QVector<double>, QPair<int,int>) -> myClass
我尝试将Pyobject* 替换为PyArrayObject*,但我得到了同样的错误。
所有其他创作者都在工作。
我错过了什么?
【问题讨论】:
-
你能尝试传递一个简单的 Python 对象,比如字符串吗?它是调用你的函数还是声称它不匹配?看起来系统需要没有指针
*的 PyObject,这不好。