Skip to content

Commit eb0f2af

Browse files
committed
Trying MakeVirtualDerivedAsBaseUniquePtr() again: pybind11 known issues #1138
1 parent 77c8b84 commit eb0f2af

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

pybind11/callback_with_virtual_class_pointer/callback_with_virtual_class_pointer.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,19 @@ PYBIND11_MODULE(callback_with_virtual_class_pointer, m) {
3636

3737
m.def("UseCallback", &UseCallback);
3838
m.def("UseCppCallback", &UseCppCallback);
39+
40+
m.def("MakeVirtualDerivedAsBaseUniquePtr",
41+
&MakeVirtualDerivedAsBaseUniquePtr
42+
//,py::return_value_policy::take_ownership
43+
//,py::return_value_policy::copy
44+
//,py::return_value_policy::move
45+
//,py::return_value_policy::reference
46+
//,py::return_value_policy::reference_internal
47+
//,py::return_value_policy::automatic
48+
//,py::return_value_policy::automatic_reference
49+
);
50+
m.def("MakeVirtualDerivedAsBaseSharedPtr",
51+
&MakeVirtualDerivedAsBaseSharedPtr);
3952
}
4053

4154
} // namespace callback_with_virtual_class_pointer

pybind11/callback_with_virtual_class_pointer/callback_with_virtual_class_pointer.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@ inline int UseCppCallback() {
3535
return UseCallback(CppCallback);
3636
}
3737

38+
inline std::unique_ptr<VirtualBase> MakeVirtualDerivedAsBaseUniquePtr() {
39+
return std::unique_ptr<VirtualBase>(new VirtualDerived);
40+
}
41+
42+
inline std::shared_ptr<VirtualBase> MakeVirtualDerivedAsBaseSharedPtr() {
43+
return std::shared_ptr<VirtualBase>(new VirtualDerived);
44+
}
45+
3846
} // namespace callback_with_virtual_class_pointer
3947

4048
#endif // CALLBACK_WITH_VIRTUAL_CLASS_POINTER_H_

pybind11/callback_with_virtual_class_pointer/callback_with_virtual_class_pointer_main.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ def PyCallback(vb):
2424
res = mut.UseCallback(PyCallback)
2525
print(res)
2626

27+
vbs = mut.MakeVirtualDerivedAsBaseSharedPtr()
28+
print(type(vbs))
29+
res = vbs.GetSomething()
30+
print(res)
31+
32+
vbu = mut.MakeVirtualDerivedAsBaseUniquePtr()
33+
print(type(vbu))
34+
res = vbu.GetSomething() # https://github.com/pybind/pybind11/issues/1138
35+
print(res)
36+
2737
print('Done.')
2838

2939

0 commit comments

Comments
 (0)