gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:03:28 26 4
gpt4 key购买 nike

在 C++ 中给定一个 PyObject* 如何确定它是否是 PyLongDoubleScalarObject 的实例?

PyLongDoubleScalarObject是存储128位 float (long double)对应的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 header ,看起来您要查找的类型对象可能是 &PyLongDoubleArrType_Type

关于c++ - 确定 PyObject* 是否为 PyLongDoubleScalarObject (numpy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com