1
0
Эх сурвалжийг харах

Merge pull request #362 from crazybie/main

fix: compiling error when bind method with pointer argument.
BLUELOVETH 10 сар өмнө
parent
commit
f3c98934dd

+ 1 - 1
include/pybind11/internal/function.h

@@ -280,7 +280,7 @@ void invoke(Fn&& fn,
 
     if constexpr(is_member_function_pointer) {
         // helper function to unpack the arguments to call the member pointer
-        auto unpack = [&](class_type_t<underlying_type>& self, auto&... args) {
+        auto unpack = [&](class_type_t<underlying_type>& self, auto&&... args) {
             return (self.*fn)(args...);
         };
 

+ 10 - 1
include/pybind11/tests/class.cpp

@@ -45,6 +45,12 @@ public:
     std::string stringfy() const {
         return "(" + std::to_string(x) + ", " + std::to_string(y) + ", " + std::to_string(z) + ")";
     }
+
+    void set_pointer(Point* p) {
+        this->x = p->x;
+        this->y = p->y;
+        this->z = p->z;
+    }
 };
 
 struct Line {
@@ -60,7 +66,8 @@ TEST_F(PYBIND11_TEST, class) {
         .def_readwrite("x", &Point::x)
         .def_readwrite("y", &Point::y)
         .def_property("z", &Point::get_z, &Point::set_z)
-        .def("stringfy", &Point::stringfy);
+        .def("stringfy", &Point::stringfy)
+        .def("set_pointer", &Point::set_pointer);
 
     py::exec(R"(
 p = Point()
@@ -74,6 +81,8 @@ p.x = 10
 p.y = 20
 p.z = 30
 assert p.stringfy() == '(10, 20, 30)'
+p.set_pointer(Point(4,5,6))
+assert p.stringfy() == '(4, 5, 6)'
 )");
 
     py::class_<Line> line(m, "Line");