0

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(); };
};

YourClassPythonQtという名前のモジュールで使用して、python にバインドする必要がありますyourmodule。問題は、メソッドがを使用してバインドされYourClass::foo(...)たパラメーターを予期していて、 について何も知らないように見えることです。コードを使用してバインドしようとすると:MyClasspybind11PythonQtMyClass

#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ていることを伝える方法が見つかりません。MyClasspybind11

誰かがアイデアを持っている場合は、共有してください。

4

0 に答える 0