4

別の C 関数を呼び出すために、cdef 関数で int の Python リストを vector[int] に変換する必要があります。私はこれを試しました:

cdef pylist_to_handles(hs):
    cdef vector[int] o_vect
    for h in hs:
        o_vect.push_back(h)
    return o_vect

他の cdef 関数からこれを呼び出すだけでよいため、これは機能するはずですが、次のエラーが発生します。

'vector<int>' を Python オブジェクトに変換できません

私は何を間違っていますか?

4

2 に答える 2

10

libcpp.vectorを使用する Cython 0.17では、次のことができます。

cdef vector[int] vect = hs
于 2012-09-04T17:39:17.567 に答える
5

あなたが本当に持っているのはこれです:

cdef object pylist_to_handles(hs):
    ...
    return <object>o_vect

タイプを明示的に設定しない場合、それはpythonオブジェクト(コードでは「オブジェクト」)であると見なされます。コードでわかるように、vector [int]をオブジェクトにキャストしようとしていますが、Cythonはそれを処理する方法を知りません。

cdefにリターンタイプを追加するだけです。

cdef vector[int] pylist_to_handles(hs):
于 2012-07-12T16:01:55.737 に答える