From 4a7f52ab2c497b8324a96178c8a9a38ebcf26064 Mon Sep 17 00:00:00 2001 From: Joel de Guzman Date: Wed, 27 Aug 2003 10:00:23 +0000 Subject: [PATCH] Initial commit of def_visitor doc [SVN r19800] --- doc/v2/def_visitor.html | 163 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 doc/v2/def_visitor.html diff --git a/doc/v2/def_visitor.html b/doc/v2/def_visitor.html new file mode 100644 index 00000000..fa39b8a6 --- /dev/null +++ b/doc/v2/def_visitor.html @@ -0,0 +1,163 @@ + + + + + + Boost.Python - <boost/python/def_visitor.hpp> + + + +
+

+

+ +
+

Boost.Python

+ +

Header <boost/python/def_visitor.hpp>

+
+
+ +

Contents

+ +
+
Introduction + +
Classes + +
+
+
Class def_visitor
+ Class def_visitor synopsis +
+
+ +
+
+
Class my_def_visitor + +
+
+
Class my_def_visitor synopsis + +
Class my_def_visitor observer functions + +
+
+ + +
Example +
+
+ +

Introduction

+ +

<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 T, which + provides the actual def functionality through its visit member + functions.

Classes

+ +

Class template def_visitor<DerivedVisitor>

+ +

The class def_visitor is a base class paramaterized by its derived class. + The def_visitor class is a protocol class. It's 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.

+Class def_visitor synopsis

+
namespace boost { namespace python {
+
+    template <class DerivedVisitor>
+    class def_visitor {};
+}
+ + +

Class my_def_visitor

+ +

A prototypical derived class of def_visitor. This client supplied class + is expected to

+ +

Class my_def_visitor synopsis

+
    class my_def_visitor : boost::python::def_visitor<my_def_visitor>
+    {
+        friend class def_visitor_access;
+
+        template <class classT>
+        void visit(classT& c) const;
+
+        template <class classT, class OptionalArgs>
+        void visit(classT& c, char const* name, OptionalArgs const& options) const;
+    };
+
+ +

Class my_def_visitor + observer functions

+
template <class classT>
+void visit(classT& c) const;
+
+
Requires: c is an instance of a class_  + being wrapped to Python. This is a client supplied function. +
Effects: A call to c.def(visitor), where c is a class_ instance and + visitor is a def_visitor derived class forwards to this visitor's visit member + function. +
Rationale: Allows my_def_visitor to non-intrusively add functionality + to the class_ def member function. +
+ +
template <class classT, class OptionalArgs>
+void visit(classT& c, char const* name, OptionalArgs const& options) const;
+
+
Requires: c is an instance of a class_  + being wrapped to Python. name is a client supplied name. This is a client + supplied function. +
Effects: A call to c.def(name, visitor) or c.def(name, visitor, options), + where c is a class_ instance and visitor is a def_visitor derived class forwards + to this visitor's visit member function. +
Rationale: Allows my_def_visitor to non-intrusively add functionality + to the class_ def member function. +
+ +

Example

+ + +
    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(object self);
+        static void bar(object self);
+    };
+
+    class X {/*...*/};
+
+    BOOST_PYTHON_MODULE(my_ext)
+    { 
+        class_<X>("X")
+            .def(my_def_visitor())
+        ;
+    }
+
+

Revised + 27 August, 2003 +

+ + +

© Copyright Joel de Guzman 2003. All Rights Reserved. \ No newline at end of file