mirror of
https://github.com/pybind/pybind11.git
synced 2026-05-21 21:39:33 +00:00
Merge branch 'master' into sh_merge_master
This commit is contained in:
@@ -177,6 +177,38 @@ struct RValueRefParam {
|
||||
std::size_t func4(std::string &&s) const & { return s.size(); }
|
||||
};
|
||||
|
||||
namespace pybind11_tests {
|
||||
namespace exercise_is_setter {
|
||||
|
||||
struct FieldBase {
|
||||
int int_value() const { return int_value_; }
|
||||
|
||||
FieldBase &SetIntValue(int int_value) {
|
||||
int_value_ = int_value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
int int_value_ = -99;
|
||||
};
|
||||
|
||||
struct Field : FieldBase {};
|
||||
|
||||
void add_bindings(py::module &m) {
|
||||
py::module sm = m.def_submodule("exercise_is_setter");
|
||||
// NOTE: FieldBase is not wrapped, therefore ...
|
||||
py::class_<Field>(sm, "Field")
|
||||
.def(py::init<>())
|
||||
.def_property(
|
||||
"int_value",
|
||||
&Field::int_value,
|
||||
&Field::SetIntValue // ... the `FieldBase &` return value here cannot be converted.
|
||||
);
|
||||
}
|
||||
|
||||
} // namespace exercise_is_setter
|
||||
} // namespace pybind11_tests
|
||||
|
||||
TEST_SUBMODULE(methods_and_attributes, m) {
|
||||
// test_methods_and_attributes
|
||||
py::class_<ExampleMandA> emna(m, "ExampleMandA");
|
||||
@@ -460,4 +492,6 @@ TEST_SUBMODULE(methods_and_attributes, m) {
|
||||
.def("func2", &RValueRefParam::func2)
|
||||
.def("func3", &RValueRefParam::func3)
|
||||
.def("func4", &RValueRefParam::func4);
|
||||
|
||||
pybind11_tests::exercise_is_setter::add_bindings(m);
|
||||
}
|
||||
|
||||
@@ -524,3 +524,12 @@ def test_rvalue_ref_param():
|
||||
assert r.func2("1234") == 4
|
||||
assert r.func3("12345") == 5
|
||||
assert r.func4("123456") == 6
|
||||
|
||||
|
||||
def test_is_setter():
|
||||
fld = m.exercise_is_setter.Field()
|
||||
assert fld.int_value == -99
|
||||
setter_return = fld.int_value = 100
|
||||
assert isinstance(setter_return, int)
|
||||
assert setter_return == 100
|
||||
assert fld.int_value == 100
|
||||
|
||||
Reference in New Issue
Block a user