...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
<boost/python/init.hpp> defines the interface for exposing C++ constructors
to Python as extension class __init__
functions.
An init-expression is used to describe a family of __init__
methods to be generated for an extension class, and the result has the
following properties:
An ntbs whose value will bound to the
method's __doc__
attribute
A keyword-expression
which will be used to name (a trailing subsequence of) the arguments
to the generated __init__
function(s).
An instance of a model of CallPolicies.
An MPL sequence of C++ argument types which will be used to construct the wrapped C++ object. An init expression has one or more valid prefixes which are given by a sequence of prefixes of its argument types.
A MPL sequence which can be used to specify a family of one or more __init__ functions. Only the last Ti supplied may be an instantiation of optional<...>.
namespace boost { namespace python { template <T1 = unspecified,...Tn = unspecified> struct init { init(char const* doc = 0); template <class Keywords> init(Keywords const& kw, char const* doc = 0); template <class Keywords> init(char const* doc, Keywords const& kw); template <class CallPolicies> unspecified operator[](CallPolicies const& policies) const }; }}
init(char const* doc = 0); template <class Keywords> init(Keywords const& kw, char const* doc = 0); template <class Keywords> init(char const* doc, Keywords const& kw);
If supplied, doc is an ntbs. If supplied, kw is the result of a
The result is an init-expression whose docstring is doc and whose keywords are a reference to kw. If the first form is used, the resulting expression's keywords are empty. The expression's call policies are an instance of default_call_policies. If Tn is optional<U1, U2,... Um>, the expression's valid prefixes are given by:
(T1, T2,...Tn-1), (T1, T2,...Tn-1 , U1), (T1, T2,...Tn-1 , U1, U2), ...(T1, T2,...Tn-1 , U1, U2,...Um)
. Otherwise, the expression has one valid prefix given by the template arguments the user specified.
template <class Policies> unspecified operator[](Policies const& policies) const
Policies is a model of CallPolicies.
Returns a new init-expression with all the same properties as the init object except that its call policies are replaced by a reference to policies.
A MPL sequence which can be used to specify the optional arguments to an __init__ function.
namespace boost { namespace python { template <T1 = unspecified,...Tn = unspecified> struct optional {}; }}
Given the C++ declarations:
class Y; class X { public: X(int x, Y* y) : m_y(y) {} X(double); private: Y* m_y; };
A corresponing Boost.Python extension class can be created with:
using namespace boost::python; class_<X>("X", "This is X's docstring.", init<int,char const*>(args("x","y"), "X.__init__'s docstring")[ with_custodian_and_ward<1,3>()] ) .def(init<double>()) ;