3

PyObject*C ++で与えられた場合、それがのインスタンスであるかどうかを判断する方法はPyLongDoubleScalarObject

PyLongDoubleScalarObjectlong doubleは、で定義されている128ビットのfloat()を格納するための対応するnumpyクラスnumpy/arrayscalars.hです。

使用は非多型dynamic_castとしては機能しません。forにPyObject*対応する方法を調べると、ほとんどの場合、などの関数を使用するためのヒントが見つかりますが、のようなものは見つかりません。dynamic_castPyObjectPyLong_CheckPyLongDouble_Check

4

1 に答える 1

4

isinstancePythonの関数に相当するCAPIは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 */
}

インスタンスのレイアウトを定義するC構造体ではなく、Pythonレベルで型を表すオブジェクトを渡す必要があることに注意してください。numpyヘッダーを見ると、後の型オブジェクトはおそらく&PyLongDoubleArrType_Typeです。

于 2012-11-12T02:58:42.720 に答える