次のようなコードがあります。
PyObject *callback;
PyObject *paths;
// Process and convert arguments
if (!PyArg_ParseTuple(args, "OO:schedule", &paths, &callback))
return NULL;
PyArg_ParseTuple 内で正確に何が起こるのでしょうか? 私の推測では、コールバックは、args (PyObject* も) に渡した関数ポインターを取得します。PyArg_ParseTuple はどのように関数ポインタを PyObject* に変換しますか?
私が知りたいのは、同じコールバック関数ポインターを 2 回渡すとどうなるかということです。コールバックは PyArg_ParseTuple 内で新しい PyObject を割り当てられると思うので、毎回異なるメモリ アドレスを取得しますが、同じコールバック関数ポインタが含まれます。
しかし、PyObject_Hash コールバックを実行すると、毎回異なる値が生成されますよね? (アドレスが毎回違うので…)