|
|
Boost.PythonHeader <boost/python/def_visitor.hpp> |
def_visitor
def_visitor
synopsisdef_visitor
requirements<boost/python/def_visitor.hpp> provides a generic visitation
interface through which the class_ def member
functionality can be extended non-intrusively to avoid cluttering the class_
interface. It declares the def_visitor<T> class template,
which is parameterized on the derived type DerivedVisitor, which provides
the actual def functionality through its visit member functions.
def_visitor<DerivedVisitor>The class def_visitor is a base class paramaterized by its derived class. The def_visitor class is a protocol class. Its derived class, DerivedVisitor, is expected to have a member function visit. The def_visitor class is never instantiated directly. Instead, an instance of its subclass, DerivedVisitor, is passed on as an argument to the class_ def member function.
def_visitor synopsisnamespace boost { namespace python {
template <class DerivedVisitor>
class def_visitor {};
}
def_visitor requirementsThe client supplied class DerivedVisitor template parameter is expected to:
| Expression | Return Type | Requirements | Effects |
| visitor.visit(cls) | void | cls is an instance of a class_ being wrapped to Python. visitor is a def_visitor derived class. | A call to cls.def(visitor) forwards to this member function. |
| visitor.visit(cls, name, options) | void | cls is a class_ instance, name is a C string. visitor is a def_visitor derived class. options is a context specific optional argument. | A call to cls.def(name, visitor) or cls.def(name, visitor, options) forwards to this member function. |
class X {/*...*/};
class my_def_visitor : boost::python::def_visitor<my_def_visitor>
{
friend class def_visitor_access;
template <class classT>
void visit(classT& c) const
{
c
.def("foo", &my_def_visitor::foo)
.def("bar", &my_def_visitor::bar)
;
}
static void foo(X& self);
static void bar(X& self);
};
BOOST_PYTHON_MODULE(my_ext)
{
class_<X>("X")
.def(my_def_visitor())
;
}
Revised 27 August, 2003
© Copyright Joel de Guzman 2003.