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