mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-25 06:35:12 +00:00
2ac5044a05
The cpp_function class accepts a variadic argument, which was formerly processed twice -- once at registration time, and once in the dispatch lambda function. This is not only unnecessarily slow but also leads to code bloat since it adds to the object code generated for every bound function. This change removes the second pass at dispatch time. One noteworthy change of this commit is that default arguments are now constructed (and converted to Python objects) right at declaration time. Consider the following example: py::class_<MyClass>("MyClass") .def("myFunction", py::arg("arg") = SomeType(123)); In this case, the change means that pybind11 must already be set up to deal with values of the type 'SomeType', or an exception will be thrown. Another change is that the "preview" of the default argument in the function signature is generated using the __repr__ special method. If it is not available in this type, the signature may not be very helpful, i.e.: | myFunction(...) | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> None One workaround (other than defining SomeType.__repr__) is to specify the human-readable preview of the default argument manually using the more cumbersome arg_t notation: py::class_<MyClass>("MyClass") .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)")); |
||
---|---|---|
.. | ||
_static | ||
advanced.rst | ||
basics.rst | ||
benchmark.py | ||
benchmark.rst | ||
classes.rst | ||
cmake.rst | ||
conf.py | ||
index.rst | ||
intro.rst | ||
Makefile | ||
pybind11_vs_boost_python1.svg | ||
pybind11_vs_boost_python2.svg | ||
reference.rst |