MyClass
を使用して python にバインドされている C++ クラスがありますpybind11
。したがってMyClass
、という名前の python モジュールに常駐しますmymodule
。つまり、Pythonからできることは次のとおりです。
import mymodule
my_class = mymodule.MyClass()
また、私はC++クラスを持っていますYourClass
:
class YourClass {
public:
YourCPPObject() {}
std::string foo(MyClass* myClass){ myClass->getName(); };
};
YourClass
PythonQt
という名前のモジュールで使用して、python にバインドする必要がありますyourmodule
。問題は、メソッドがを使用してバインドされYourClass::foo(...)
たパラメーターを予期していて、 について何も知らないように見えることです。コードを使用してバインドしようとすると:MyClass
pybind11
PythonQt
MyClass
#include <myclass.h>
#include <string>
#include "PythonQt.h"
#include <QApplication>
class YourClassDecorators : public QObject
{
Q_OBJECT
public Q_SLOTS:
YourClass * new_YourClass() { return new YourClass(); } // constructor
void delete_YourClass(YourClass* obj) { delete obj; } // destructor
// main function that accepts third party class binded with pybind11
std::string foo(YourClass* yourClass, MyClass* myClass) { return yourClass->foo(myClass); }
};
int main( int argc, char **argv )
{
QApplication qapp(argc, argv);
PythonQt::init(PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut);
PythonQt::self()->addDecorators(new YourClassDecorators());
PythonQt::self()->registerCPPClass("MyClass","", "mymodule"); // I don't know maybe I don't need to register MyClass (still doesn't work)
PythonQt::self()->registerCPPClass("YourClass","", "yourmodule");
return qapp.exec();
}
Python でエラーが発生します。
ValueError: Called foo(MyClass myclass) -> std::string with wrong arguments: (<myclass.MyClass object at 0x7fc52eb92e68>,)
を使用して既にバインドされPythonQt
ていることを伝える方法が見つかりません。MyClass
pybind11
誰かがアイデアを持っている場合は、共有してください。