123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // Copyright David Abrahams 2004. Distributed under the Boost
- // Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- #include <boost/python.hpp>
- #include <iostream>
- using namespace boost::python;
- using namespace boost;
- struct Product {};
- typedef shared_ptr<Product> ProductPtr;
- struct Creator
- {
- virtual ~Creator() {}
- virtual ProductPtr create() = 0;
- };
- struct Factory
- {
- void reg(Creator* c) { mC = c; }
- ProductPtr create()
- {
- std::cout << "Name: " << (typeid(*mC)).name() << std::endl;
- return mC->create();
- }
- private:
- Creator* mC;
- };
- struct CreatorWrap : public Creator
- {
- CreatorWrap(PyObject* self) : mSelf(self) {}
- ProductPtr create() { return call_method<ProductPtr>(mSelf, "create"); }
- PyObject* mSelf;
- };
- BOOST_PYTHON_MODULE(ben_scott1_ext)
- {
- class_<Product, ProductPtr>("Product");
- class_<Creator, CreatorWrap, noncopyable>("Creator")
- .def("create", &CreatorWrap::create)
- ;
- class_<Factory>("Factory")
- .def("reg", &Factory::reg, with_custodian_and_ward<1,2>())
- .def("create", &Factory::create)
- ;
- }
- #include "../test/module_tail.cpp"
|