// Boost Includes ============================================================== #include #include // Includes ==================================================================== #include // Using ======================================================================= using namespace boost::python; // Declarations ================================================================ namespace { struct Foo_Wrapper: Foo { Foo_Wrapper(PyObject* self_, const Foo& p0): Foo(p0), self(self_) {} Foo_Wrapper(PyObject* self_): Foo(), self(self_) {} void memberFunction_bad_virtual(const char* p0, ... ) { call_method< void >(self, "memberFunction_bad_virtual", p0); } void default_memberFunction_bad_virtual(const char* p0, ... ) { Foo::memberFunction_bad_virtual(p0); } void memberFunction_bad_pure_virtual(const char* p0, ... ) { call_method< void >(self, "memberFunction_bad_pure_virtual", p0); } int memberFunction_control_virtual() { return call_method< int >(self, "memberFunction_control_virtual"); } int default_memberFunction_control_virtual() { return Foo::memberFunction_control_virtual(); } int memberFunction_control_pure_virtual() { return call_method< int >(self, "memberFunction_control_pure_virtual"); } PyObject* self; }; }// namespace // Module ====================================================================== BOOST_PYTHON_MODULE(Foo) { class_< Foo, boost::noncopyable, Foo_Wrapper >("Foo", init< >()) .def("memberFunction_control_virtual", &Foo::memberFunction_control_virtual, &Foo_Wrapper::default_memberFunction_control_virtual) .def("memberFunction_control_pure_virtual", pure_virtual(&Foo::memberFunction_control_pure_virtual)) .def("memberFunction_control", &Foo::memberFunction_control) ; def("function_control", &function_control); }