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 に変換しますか?