给定C ++中的PyObject*
如何确定它是否是PyLongDoubleScalarObject
的实例?
PyLongDoubleScalarObject
是存储128位浮点数(long double
)的相应numpy类,它在numpy/arrayscalars.h
中定义。
使用dynamic_cast
无效,PyObject*
非多态。当我查看如何为dynamic_cast
PyObject
执行与PyLong_Check
相对应的操作时,我主要找到使用PyLongDouble_Check
等函数的提示,但我找不到类似{{1}}的内容。
答案 0 :(得分:4)
与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
。