59 lines
2.7 KiB
Plaintext
59 lines
2.7 KiB
Plaintext
[section boost/python/def_visitor.hpp]
|
|
[section Introduction]
|
|
<boost/python/def_visitor.hpp> provides a generic visitation interface through which the [link high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel class_] def member functionality can be extended non-intrusively to avoid cluttering the [link high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel 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.
|
|
[endsect]
|
|
[section Class `def_visitor`]
|
|
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 [link high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel class_] `def` member function.
|
|
|
|
``
|
|
namespace boost { namespace python {
|
|
|
|
template <class DerivedVisitor>
|
|
class def_visitor {};
|
|
}
|
|
``
|
|
|
|
[variablelist
|
|
[[Requires][The client supplied class DerivedVisitor template parameter is expected to:
|
|
* be privately derived from def_visitor
|
|
* grant friend access to class def_visitor_access
|
|
* define either or both visit member functions listed in the table below:
|
|
[table
|
|
[[Expression][Return Type][Requirements][Effects]]
|
|
[[`visitor.visit(cls)`][`void`]
|
|
[`cls` is an instance of a [link high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel 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 [link high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel 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. ]]]
|
|
]]
|
|
]
|
|
[endsect]
|
|
[section Example]
|
|
``
|
|
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);
|
|
c.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());
|
|
}
|
|
``
|
|
[endsect]
|
|
[endsect]
|