File indexing completed on 2025-12-16 10:07:44
0001
0002
0003
0004
0005 #ifndef DEF_VISITOR_DWA2003810_HPP
0006 # define DEF_VISITOR_DWA2003810_HPP
0007
0008 # include <boost/python/detail/prefix.hpp>
0009 # include <boost/detail/workaround.hpp>
0010
0011 namespace boost { namespace python {
0012
0013 template <class DerivedVisitor> class def_visitor;
0014 template <class T, class X1, class X2, class X3> class class_;
0015
0016 class def_visitor_access
0017 {
0018 # if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
0019 || BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x551))
0020
0021
0022 public:
0023 # else
0024 template <class Derived> friend class def_visitor;
0025 # endif
0026
0027
0028 template <class V, class classT>
0029 static void visit(V const& v, classT& c)
0030 {
0031 v.derived_visitor().visit(c);
0032 }
0033
0034
0035 template <class V, class classT, class OptionalArgs>
0036 static void visit(
0037 V const& v
0038 , classT& c
0039 , char const* name
0040 , OptionalArgs const& options
0041 )
0042 {
0043 v.derived_visitor().visit(c, name, options);
0044 }
0045
0046 };
0047
0048
0049 template <class DerivedVisitor>
0050 class def_visitor
0051 {
0052 friend class def_visitor_access;
0053
0054 # if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
0055 || BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x551))
0056
0057
0058 public:
0059 # else
0060 template <class T, class X1, class X2, class X3> friend class class_;
0061 # endif
0062
0063
0064 template <class classT>
0065 void visit(classT& c) const
0066 {
0067 def_visitor_access::visit(*this, c);
0068 }
0069
0070
0071 template <class classT, class OptionalArgs>
0072 void visit(classT& c, char const* name, OptionalArgs const& options) const
0073 {
0074 def_visitor_access::visit(*this, c, name, options);
0075 }
0076
0077 protected:
0078 DerivedVisitor const& derived_visitor() const
0079 {
0080 return static_cast<DerivedVisitor const&>(*this);
0081 }
0082 };
0083
0084 }}
0085
0086 #endif