其他分享
首页 > 其他分享> > c-确定PyObject *是否为PyLongDoubleScalarObject(numpy)

c-确定PyObject *是否为PyLongDoubleScalarObject(numpy)

作者:互联网

给定C中的PyObject *,如何确定它是否是PyLongDoubleScalarObject的实例?

PyLongDoubleScalarObject是用于存储128位浮点数(长双精度)的相应numpy类,该类在numpy / arrayscalars.h中定义.

使用dynamic_cast不能作为PyObject *非多态的.当我寻找如何为PyObject做与dynamic_cast相对应的操作时,我通常会找到使用PyLong_Check之类的功能的提示,但找不到与PyLongDouble_Check之类的东西.

解决方法:

Python的isinstance函数等效的C API是PyObject_TypeCheck,因此您可以执行以下操作:

if (PyObject_TypeCheck(obj, typeobject)) {
     /* obj matches the given type */
}

或者,如果要检查对象的确切类型而不接受子类型,则可以直接检查类型:

if (Py_TYPE(obj) == typeobject) {
    /* obj is an instance of the given type and not a subclass */
}

请注意,您需要在Python级别传递表示类型的对象,而不是定义实例布局的C结构.查看numpy标头,看起来您想要的类型对象可能是& PyLongDoubleArrType_Type.

标签:boost-python,python,c-4,numpy
来源: https://codeday.me/bug/20191031/1977426.html