You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							247 lines
						
					
					
						
							8.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							247 lines
						
					
					
						
							8.1 KiB
						
					
					
				| .. _reference: | |
|  | |
| .. warning:: | |
|  | |
|     Please be advised that the reference documentation discussing pybind11 | |
|     internals is currently incomplete. Please refer to the previous sections | |
|     and the pybind11 header files for the nitty gritty details. | |
|  | |
| Reference | |
| ######### | |
|  | |
| Macros | |
| ====== | |
|  | |
| .. function:: PYBIND11_PLUGIN(const char *name) | |
|  | |
|     This macro creates the entry point that will be invoked when the Python | |
|     interpreter imports a plugin library. Please create a | |
|     :class:`module` in the function body and return the pointer to its | |
|     underlying Python object at the end. | |
|  | |
|     .. code-block:: cpp | |
| 
 | |
|         PYBIND11_PLUGIN(example) { | |
|             pybind11::module m("example", "pybind11 example plugin"); | |
|             /// Set up bindings here | |
|             return m.ptr(); | |
|         } | |
| 
 | |
| .. _core_types: | |
|  | |
| Convenience classes for arbitrary Python types | |
| ============================================== | |
|  | |
| Without reference counting | |
| -------------------------- | |
|  | |
| .. class:: handle | |
|  | |
|     The :class:`handle` class is a thin wrapper around an arbitrary Python | |
|     object (i.e. a ``PyObject *`` in Python's C API). It does not perform any | |
|     automatic reference counting and merely provides a basic C++ interface to | |
|     various Python API functions. | |
|  | |
| .. seealso:: | |
|  | |
|     The :class:`object` class inherits from :class:`handle` and adds automatic | |
|     reference counting features. | |
|  | |
| .. function:: handle::handle() | |
|  | |
|     The default constructor creates a handle with a ``nullptr``-valued pointer. | |
|  | |
| .. function:: handle::handle(const handle&) | |
|  | |
|     Copy constructor | |
|  | |
| .. function:: handle::handle(PyObject *) | |
|  | |
|     Creates a :class:`handle` from the given raw Python object pointer. | |
|  | |
| .. function:: PyObject * handle::ptr() const | |
|  | |
|     Return the ``PyObject *`` underlying a :class:`handle`. | |
|  | |
| .. function:: const handle& handle::inc_ref() const | |
|  | |
|     Manually increase the reference count of the Python object. Usually, it is | |
|     preferable to use the :class:`object` class which derives from | |
|     :class:`handle` and calls this function automatically. Returns a reference | |
|     to itself. | |
|  | |
| .. function:: const handle& handle::dec_ref() const | |
|  | |
|     Manually decrease the reference count of the Python object. Usually, it is | |
|     preferable to use the :class:`object` class which derives from | |
|     :class:`handle` and calls this function automatically. Returns a reference | |
|     to itself. | |
|  | |
| .. function:: void handle::ref_count() const | |
|  | |
|     Return the object's current reference count | |
|  | |
| .. function:: handle handle::get_type() const | |
|  | |
|     Return a handle to the Python type object underlying the instance | |
|  | |
| .. function detail::accessor handle::operator[](handle key) const | |
|  | |
|     Return an internal functor to invoke the object's sequence protocol. | |
|     Casting the returned ``detail::accessor`` instance to a :class:`handle` or | |
|     :class:`object` subclass causes a corresponding call to ``__getitem__``. | |
|     Assigning a :class:`handle` or :class:`object` subclass causes a call to | |
|     ``__setitem__``. | |
|  | |
| .. function detail::accessor handle::operator[](const char *key) const | |
|  | |
|     See the above function (the only difference is that they key is provided as | |
|     a string literal). | |
|  | |
| .. function detail::accessor handle::attr(handle key) const | |
|  | |
|     Return an internal functor to access the object's attributes. | |
|     Casting the returned ``detail::accessor`` instance to a :class:`handle` or | |
|     :class:`object` subclass causes a corresponding call to ``__getattr``. | |
|     Assigning a :class:`handle` or :class:`object` subclass causes a call to | |
|     ``__setattr``. | |
|  | |
| .. function detail::accessor handle::attr(const char *key) const | |
|  | |
|     See the above function (the only difference is that they key is provided as | |
|     a string literal). | |
|  | |
| .. function operator handle::bool() const | |
|  | |
|     Return ``true`` when the :class:`handle` wraps a valid Python object. | |
|  | |
| .. function str handle::str() const | |
|  | |
|     Return a string representation of the object. This is analogous to | |
|     the ``str()`` function in Python. | |
|  | |
| .. function:: template <typename T> T handle::cast() const | |
|  | |
|     Attempt to cast the Python object into the given C++ type. A | |
|     :class:`cast_error` will be throw upon failure. | |
|  | |
| .. function:: template <typename ... Args> object handle::call(Args&&... args) const | |
|  | |
|     Assuming the Python object is a function or implements the ``__call__`` | |
|     protocol, ``call()`` invokes the underlying function, passing an arbitrary | |
|     set of parameters. The result is returned as a :class:`object` and may need | |
|     to be converted back into a Python object using :func:`handle::cast`. | |
|  | |
|     When some of the arguments cannot be converted to Python objects, the | |
|     function will throw a :class:`cast_error` exception. When the Python | |
|     function call fails, a :class:`error_already_set` exception is thrown. | |
|  | |
| With reference counting | |
| ----------------------- | |
|  | |
| .. class:: object : public handle | |
|  | |
|     Like :class:`handle`, the object class is a thin wrapper around an | |
|     arbitrary Python object (i.e. a ``PyObject *`` in Python's C API). In | |
|     contrast to :class:`handle`, it optionally increases the object's reference | |
|     count upon construction, and it *always* decreases the reference count when | |
|     the :class:`object` instance goes out of scope and is destructed. When | |
|     using :class:`object` instances consistently, it is much easier to get | |
|     reference counting right at the first attempt. | |
|  | |
| .. function:: object::object(const object &o) | |
|  | |
|     Copy constructor; always increases the reference count | |
|  | |
| .. function:: object::object(const handle &h, bool borrowed) | |
|  | |
|     Creates a :class:`object` from the given :class:`handle`. The reference | |
|     count is only increased if the ``borrowed`` parameter is set to ``true``. | |
|  | |
| .. function:: object::object(PyObject *ptr, bool borrowed) | |
|  | |
|     Creates a :class:`object` from the given raw Python object pointer. The | |
|     reference  count is only increased if the ``borrowed`` parameter is set to | |
|     ``true``. | |
|  | |
| .. function:: object::object(object &&other) | |
|  | |
|     Move constructor; steals the object from ``other`` and preserves its | |
|     reference count. | |
|  | |
| .. function:: handle object::release() | |
|  | |
|     Resets the internal pointer to ``nullptr`` without without decreasing the | |
|     object's reference count. The function returns a raw handle to the original | |
|     Python object. | |
|  | |
| .. function:: object::~object() | |
|  | |
|     Destructor, which automatically calls :func:`handle::dec_ref()`. | |
|  | |
| Convenience classes for specific Python types | |
| ============================================= | |
|  | |
|  | |
| .. class:: module : public object | |
|  | |
| .. function:: module::module(const char *name, const char *doc = nullptr) | |
|  | |
|     Create a new top-level Python module with the given name and docstring | |
|  | |
| .. function:: module module::def_submodule(const char *name, const char *doc = nullptr) | |
|  | |
|     Create and return a new Python submodule with the given name and docstring. | |
|     This also works recursively, i.e. | |
|  | |
|     .. code-block:: cpp | |
| 
 | |
|         pybind11::module m("example", "pybind11 example plugin"); | |
|         pybind11::module m2 = m.def_submodule("sub", "A submodule of 'example'"); | |
|         pybind11::module m3 = m2.def_submodule("subsub", "A submodule of 'example.sub'"); | |
| 
 | |
| .. cpp:function:: template <typename Func, typename ... Extra> module& module::def(const char *name, Func && f, Extra && ... extra) | |
|  | |
|     Create Python binding for a new function within the module scope. ``Func`` | |
|     can be a plain C++ function, a function pointer, or a lambda function. For | |
|     details on the ``Extra&& ... extra`` argument, see section :ref:`extras`. | |
|  | |
| .. _extras: | |
|  | |
| Passing extra arguments to the def function | |
| =========================================== | |
|  | |
| .. class:: arg | |
|  | |
| .. function:: arg::arg(const char *name) | |
|  | |
| .. function:: template <typename T> arg_v arg::operator=(T &&value) | |
|  | |
| .. class:: arg_v : public arg | |
|  | |
|     Represents a named argument with a default value | |
|  | |
| .. class:: sibling | |
|  | |
|     Used to specify a handle to an existing sibling function; used internally | |
|     to implement function overloading in :func:`module::def` and | |
|     :func:`class_::def`. | |
|  | |
| .. function:: sibling::sibling(handle handle) | |
|  | |
| .. class doc | |
|  | |
|     This is class is internally used by pybind11. | |
|  | |
| .. function:: doc::doc(const char *value) | |
|  | |
|     Create a new docstring with the specified value | |
|  | |
| .. class name | |
|  | |
|     This is class is internally used by pybind11. | |
|  | |
| .. function:: name::name(const char *value) | |
|  | |
|     Used to specify the function name | |
| 
 |