Chaste / cppwg

An automatic Python wrapper generator for C++ code.
BSD 3-Clause "New" or "Revised" License
46 stars 8 forks source link

Bind operator overloads #64

Open kwabenantim opened 1 week ago

kwabenantim commented 1 week ago

Summary

Automatically generate bindings for overloaded operators. For example:

class Foo
{
public:
  Foo();
  ~Foo();
  double& operator[](unsigned index);
};

An example of generated bindings for the overloaded operator[]:

void register_Foo_class(py::module &m)
{
  py::class_<Foo>(m, "Foo")
    // ...
    .def("__setitem__", &Foo::operator[], "")
    .def("__getitem__", &Foo::operator[], "")
  ;
}

This can currently be added in using custom templates:

class Foo(cppwg.templates.custom.Custom):

    def get_class_cpp_def_code(self, class_name):
        code = """\
        .def("__getitem__", &{class_name}::operator[])
        .def("__setitem__", &{class_name}::operator[])
        """.format(class_name=class_name)

        return code