22 return std::make_shared<MyVirtualData>(*
this);
33 printf(
"Created MyVirtualData with address %p\n", (
void *)d.get());
40 printf(
"Created MyVirtualData with address %p\n", (
void *)d.get());
46 throw std::runtime_error(
"Called C++ virtual function.");
52 if (bp::override fo = this->get_override(
"doSomethingPtr")) {
67 if (bp::override fo = this->get_override(
"doSomethingRef")) {
75 if (bp::override fo = this->get_override(
"createData"))
return fo();
109 auto *dter = std::get_deleter<bp::converter::shared_ptr_deleter>(d);
110 if (dter != 0) printf(
"> input shared_ptr has a deleter\n");
115 shared_ptr<MyVirtualData>
copy_shared(
const shared_ptr<MyVirtualData> &d) {
116 auto *dter = std::get_deleter<bp::converter::shared_ptr_deleter>(d);
117 if (dter != 0) printf(
"> input shared_ptr has a deleter\n");
123 "MyVirtualClass should be polymorphic!");
125 "MyVirtualData should be polymorphic!");
127 bp::class_<VirtualClassWrapper, boost::noncopyable>(
128 "MyVirtualClass", bp::init<>(bp::args(
"self")))
130 bp::args(
"self",
"data"))
132 bp::args(
"self",
"data"))
136 bp::register_ptr_to_python<shared_ptr<MyVirtualData> >();
140 bp::class_<DataWrapper, boost::noncopyable>(
"MyVirtualData", bp::no_init)
141 .def(bp::init<MyVirtualClass const &>(bp::args(
"self",
"model")));
146 bp::def(
"iden_ref",
iden_ref, bp::return_internal_reference<>());
147 bp::def(
"iden_shared",
iden_shared, bp::return_internal_reference<>());