1 // Copyright David Abrahams 2001. 2 // Distributed under the Boost Software License, Version 1.0. (See 3 // accompanying file LICENSE_1_0.txt or copy at 4 // http://www.boost.org/LICENSE_1_0.txt) 5 #ifndef CLASS_DWA20011214_HPP 6 # define CLASS_DWA20011214_HPP 7 8 # include <boost/python/detail/prefix.hpp> 9 # include <boost/python/object_core.hpp> 10 # include <boost/python/type_id.hpp> 11 # include <cstddef> 12 13 namespace boost { namespace python { 14 15 namespace objects { 16 17 struct BOOST_PYTHON_DECL class_base : python::api::object 18 { 19 // constructor 20 class_base( 21 char const* name // The name of the class 22 23 , std::size_t num_types // A list of class_ids. The first is the type 24 , type_info const*const types // this is wrapping. The rest are the types of 25 // any bases. 26 27 , char const* doc = 0 // Docstring, if any. 28 ); 29 30 31 // Implementation detail. Hiding this in the private section would 32 // require use of template friend declarations. 33 void enable_pickling_(bool getstate_manages_dict); 34 35 protected: 36 void add_property( 37 char const* name, object const& fget, char const* docstr); 38 void add_property(char const* name, 39 object const& fget, object const& fset, char const* docstr); 40 41 void add_static_property(char const* name, object const& fget); 42 void add_static_property(char const* name, object const& fget, object const& fset); 43 44 // Retrieve the underlying object 45 void setattr(char const* name, object const&); 46 47 // Set a special attribute in the class which tells Boost.Python 48 // to allocate extra bytes for embedded C++ objects in Python 49 // instances. 50 void set_instance_size(std::size_t bytes); 51 52 // Set an __init__ function which throws an appropriate exception 53 // for abstract classes. 54 void def_no_init(); 55 56 // Effects: 57 // setattr(self, staticmethod(getattr(self, method_name))) 58 void make_method_static(const char *method_name); 59 }; 60 61 }}} // namespace boost::python::objects 62 63 #endif // CLASS_DWA20011214_HPP 64