gpt4 book ai didi

swig - PyBind - 重载函数

转载 作者:行者123 更新时间:2023-12-04 12:01:32 34 4
gpt4 key购买 nike

首先,感谢大家努力解决我的这个疑问。我正在转换一个最小的 C++ 项目以在 Python 中使用。这种努力背后的真正原因是为了速度。
我遇到了 PyBind,对它的功能以及他们提供的文档数量感到非常惊讶。现在有一些事情阻止了工作,因为我不知道该怎么做。考虑文件“MySource.hpp”中的以下代码,您能告诉我如何完成绑定(bind)吗?

    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 的绑定(bind)定义为一个类及其某些成员函数。但我不知道如何绑定(bind)重载方法“ VectorCross ”。它有两种方法,一种接受 Point3D 的实例,另一种接受指向浮点数组的指针。
到目前为止我写的绑定(bind)如下所示
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);
}
有人可以指导我如何做到这一点吗?

最佳答案

看来你需要做overload cast如所述 here .

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

关于swig - PyBind - 重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46388755/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com