Cythonを使用してPythonで使用できるように、一連のC ++クラスのラップを作成しようとしています。これは私がこれまでに試したことです。
cdef extern from "HilClass.h" namespace "acro":
cdef cppclass _HilClass "HilClass":
void start()
cdef class HilClass:
cdef _HilClass *ptr
cpdef start(self):
self.ptr.start()
それはコンパイルされません。以下のエラーが表示されますが、クラスが見つからないことが原因の可能性があることがわかりました。そのため、ヘッダーとソースが適切に含まれていることを確認した後、Cythonによって生成された.cppを調べました。検索しましacro
たが見つかりませんでした。コードのどこにも言及されていません。
error C2143: syntax error: missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
... (more warning and errors related to HilClass)
これは、2行目をに変更することにしたときです。
cdef cppclass _HilClass "acro::HilClass":
これはコンパイルされます。しかし、これは私が見つけたどの例/チュートリアルでも行われていませんでした。だから私の質問は、私は何かが足りないので、私の「回避策」は確実に機能し続けるだろうということです。
注:PythonまたはCython内からこのクラスのインスタンスを作成することに興味はありません。必要なのは、HilClassポインターをラップアラウンドすることだけです。
編集:これは「HilClass.h」内のコードです。'acrophobe.h'には、いくつかのクラス前方宣言、列挙型typedef unint#_t ####
、、があり、stdintが含まれています。
#include "acrophobe.h"
namespace acro {
class HilClass
{
public:
HilClass(AcrophobeClass *acro_ptr);
~HilClass();
HILSocketClass *sck;
void start();
void acrophile_iteration(char dest, lbp::PortID_t PortID);
void set_activity_iteration_start(bool s);
// More of these set_activity functions
void set_activity_logging(bool s);
private:
AcrophobeClass *acro;
};
}
あなたがしたように定義する必要があります
cdef cppclass _HilClass "acro::HilClass"
acro :: HilClassにエイリアス_HilClassを指定しているためです。定義するとどうなるかをテストできます
cdef cppclass HilClass:
void start()
その後(クラス名は単なる例です)
cdef class PyHilClass:
cdef HilClass * ptr
あなたのソリューションが信頼できない理由はわかりません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加