1

libboost_python と Pyste ジェネレーターを使用して、C++ ライブラリに Python を埋め込みます。

lib クラスの 1 つのラッパーを生成することができました。コンパイルはできますが、関数のシグネチャが異なるため、Python では使用できません。

例えば:

Pyste は、MyLib::Object::Translate() メソッド用に次の C++ コードを生成します。

BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(MyLib_Entity_Translate_overloads_3_4, Translate, 3, 4)

// Module ======================================================================                                                                                                 
BOOST_PYTHON_MODULE(mylib)
{
    scope* MyLib_Object_scope = new scope(
    class_< MyLib::Object, boost::noncopyable, MyLib_Object_Wrapper >("Object", init< const MyLib::String& >())
    .def("Translate", (void (MyLib::Entity::*)(const double&, const double&, const double&, const MyLib::Entity*) &MyLib::Entity::Translate, MyLib_Entity_Translate_overloads_3_4())
    /*...*/
    };
 }

Pythonで呼び出すと、

this.Translate(0.0, 1.0, 0.0) 

このエラーがあります

Python のエラー:: Object.Translate(Object, float, float, float) の Python 引数の型が C++ 署名と一致しませんでした: Translate(MyLib::Entity {lvalue}, double, double, double): ファイル "testobj.py" 、2行目、this.Translate(0.0, 1.0, 0.0)

MyLib::Object は MyLib::Entity から継承されていることに注意してください。

私は何をすべきか?MyLib::Entity もエクスポートしますか? すべての C++ コードを double から float に変換しますか?

4

0 に答える 0