コールバック関数 (callback_function) を使用して、ラップしたい構造体 (glp_tree) へのポインターを提供する C ライブラリを使用しようとしています。
で作成されていないポインタでインスタンスを初期化する正しい方法は何__cinit__
ですか? cython のドキュメントでこのパターンの例を見つけることができません。
ポインタを整数にキャストして戻す作業コード(以下を参照)がありますが、これが良い習慣/正気であるかどうかはわかりません。
cdef extern from "stdint.h":
ctypedef unsigned long long uint64_t
cdef extern from "glpk.h":
ctypedef struct glp_tree:
pass
cdef void callback_func(glp_tree* tree, void *info):
treeobj = Tree(<uint64_t>tree) // cast to an integer...
cdef class Tree:
cdef glp_tree* ptr
def __init__(self, uint64_t ptr):
self.ptr = <glp_tree*>ptr // ... and back to a pointer
glp_tree オブジェクトを直接渡すとうまくいくようですが (私がやりたいことではありませんが)、ポインターを渡そうとするとコンパイラ エラーが発生します。
Cannot convert 'glp_tree *' to Python object