3

给定PyObject*C++ 中的 a 如何确定它是否是PyLongDoubleScalarObject?

PyLongDoubleScalarObject是对应的 numpy 类来存储 128 位浮点数 ( long double),定义在numpy/arrayscalars.h.

usingdynamic_cast不能作为PyObject*非多态的。当我查看如何执行与 for 相对应的操作时dynamic_castPyObject我大多会找到使用诸如 之类的函数的提示PyLong_Check,但我没有找到类似PyLongDouble_Check.

4

1 回答 1

4

isinstance等效于 Python函数的 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.

于 2012-11-12T02:58:42.720 回答