pybind11 - 包装重载赋值运算符?

adr*_*ens 5 c++ python pybind11

我正在使用 pybind11 将 C++ 函数公开给 Python 接口。我想包装重载的赋值运算符,但不知道如何。提供的文档和示例并没有真正涵盖它,至少从我所看到的来看是这样。

这是我正在尝试做的事情的简化版本:

class Num{
  public:
    Num(const double& num) : m_val(num), m_type(Num::Type::e_none){}

    Num& operator=(const double& rhs){m_val = rhs;}

  private:
    double m_val;
};
Run Code Online (Sandbox Code Playgroud)

这是包装:

PYBIND11_MODULE(demo, m){
    py::class_<Num>(m, "Num")
        .def(py::init<const double&>())
        // Overloaded assignment operator binding ?
        ;
}
Run Code Online (Sandbox Code Playgroud)

我主要关心的是在将 Num 分配给浮点数时保留它的数据类型。例如:

>>> m = Num(4.5)
>>> type(m)
<class 'demo.Num'>
>>> m = 5.5
>>> type(m)
<class 'float'>
Run Code Online (Sandbox Code Playgroud)

这是我第一次使用 C++ 扩展和绑定,因此任何关于我应该做什么的见解都会很棒!

小智 1

.def("assign", &Num::operator=);
Run Code Online (Sandbox Code Playgroud)

请参阅https://github.com/pybind/pybind11/issues/250了解更多详细信息。