PyBind - 重载函数

PyBind - 重载函数

问题描述:

首先,我要感谢大家试图解决我的这个疑问。我正在致力于将最小的C++项目转换为在Python中使用。这一努力背后的真正原因是速度。PyBind - 重载函数

我遇到了PyBind,对它的功能以及它们提供的文档数量感到非常惊讶。现在有些东西停止了工作,因为我不知道如何去做。考虑文件“MySource.hpp”中的下面的代码,你可以告诉我一个绑定可以做什么?

struct Point3D 
    { 
    public: 
     double x, y, z; 
     CPoint3D(); 
     CPoint3D(double x, double y, double z); 
     inline double Len() const; 
     inline void Normalize(); 
    }; 

    Point3D VectorCross(const Point3D& pt1, const Point3D& pt2, const Point3D& pt3); 
    void VectorCross(const float* u, const float* v, float * n); 

我能够为Point3D定义一个绑定作为一个类和它的某些成员函数。但我不知道如何为超载方法“VectorCross”执行绑定。它有两个方法,一个接受Point3D的实例,另一个接受指向浮点数组的指针。

的绑定我写到目前为止,如下所示

PYBIND11_MODULE(mymodule, m) 
{ 
    py::class_<Point3D> point3d(m, "Point3D"); 
    point3d.def_readwrite("x", &CPoint3D::x); 
    point3d.def_readwrite("y", &CPoint3D::y); 
    point3d.def_readwrite("z", &CPoint3D::z); 
    point3d.def(py::init<>()); 
    point3d.def(py::init<double , double , double >()); 
    point3d.def("Len", &CPoint3D::Len); 
    point3d.def("Normalize", &CPoint3D::Normalize); 
} 

有人可以请指导我如何做到这一点?

问候,

0K

看来,你需要描述hereoverload cast

m.def("VectorCross", py::overload_cast<const Point3D&, const Point3D&, const Point3D&>(&VectorCross)); 
m.def("VectorCross", py::overload_cast<const float*, const float*, float*>(&VectorCross)); 

罗马,

我想通了这一点,但仍然选择你的答案是正确的它确实是答案。但仍然在方法签名,其中它期望的参数是浮指针(下面一行)的情况下

m.def("VectorCross", py::overload_cast<const float*, const float*, float*>(&VectorCross));

编译在创建Python库细。但是当你尝试调用python的方法导入后会导致参数错误。

Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: AngleBetween(): incompatible function arguments. The following argument types are supported: 1. (pt1: chenhancc.CPoint3D, pt2: chenhancc.CPoint3D) -> float 2. (pt1: chenhancc.CPoint3D, pt2: chenhancc.CPoint3D, pt3: chenhancc.CPoint3D) -> float 3. (u: float, v: float) -> float

看起来像蟒蛇在它看来,如果他们是普通的浮点数参数。

但我仍然衷心的感谢和感谢你的时间。

问候,

0K

+0

什么是'AngleBetween()'?这个函数不在你的代码示例中。 –

+0

Ooops与我最初询问的签名类似。当我写评论的时候,我正在测试同一个库,所以在我的终端上。抱歉让你困惑。 –