私はC++/Pythonの混合言語プログラミングには新しく、Python/C APIについてよく考えていません。私はBoost.Pythonを使ってPython用のC++ライブラリをラップし始めました。私は引数として配列へのポインタを取る関数をラップすることに固執しています。次の(2番目のctor)はC++のプロトタイプです。ラップされたC++関数のためにPythonで配列へのポインタを渡す方法
class AAF{
AAF(AAF_TYPE t);
AAF(double v0, const double * t1, const unsigned * t2, unsigned T);
~AAF();
}
私はこのようにboost :: pythonでこれをラップしていますか?
class_<AAF>("AAF", init<AAF_TYPE>())
.def(init<double, const double*, const unsigned*, unsigned>());
正常にコンパイルされてリンクされていることに注意してください。ただし、Pythonで呼び出す方法はわかりませんでした。私の素朴な試みは次のように失敗しました。
>>> z = AAF(10, [4, 5.5, 10], [1, 1, 2], 3);
Traceback (most recent call last):
File "./test_interval.py", line 40, in <module>
z = AAF(10, [4, 5.5, 10], [1, 1, 2], 3);
Boost.Python.ArgumentError: Python argument types in
AAF.__init__(AAF, int, list, list, int)
did not match C++ signature:
__init__(_object*, AAF_TYPE)
__init__(_object*, double, double const*, unsigned int const*, unsigned int)
>>> t1 = array.array('d', [4, 5.5, 10])
>>> t2 = array.array('I', [1, 1, 2])
>>> z = AAF(10, t1, t2, 3);
Traceback (most recent call last):
File "./test_interval.py", line 40, in <module>
z = AAF(10, t1, t2, 3);
Boost.Python.ArgumentError: Python argument types in
AAF.__init__(AAF, int, array.array, array.array, int)
did not match C++ signature:
__init__(_object*, AAF_TYPE)
__init__(_object*, double, double const*, unsigned int const*, unsigned int)
私の2番目の質問は、デストラクタもラップする必要がありますか?これが必要な場合があるかどうかを明記してください。
返信いただきありがとうございますが、私が言ったように、私はPython/C APIについてあまり知りません。 PythonのリストをC++配列に変換する方法を見つけることができるようにどこかを指摘できますか? – Aamir
この場合、 "to C array"と言うでしょうが、いくつかのサンプルコードを追加しました。 – andreabedini