| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| attr.h | ||
| buffer_info.h | ||
| cast.h | ||
| chrono.h | ||
| class_support.h | ||
| common.h | ||
| complex.h | ||
| descr.h | ||
| eigen.h | ||
| embed.h | ||
| eval.h | ||
| functional.h | ||
| numpy.h | ||
| operators.h | ||
| options.h | ||
| pybind11.h | ||
| pytypes.h | ||
| stl.h | ||
| stl_bind.h | ||
| typeid.h |
This commit allows multiple inheritance of pybind11 classes from
Python, e.g.
class MyType(Base1, Base2):
def __init__(self):
Base1.__init__(self)
Base2.__init__(self)
where Base1 and Base2 are pybind11-exported classes.
This requires collapsing the various builtin base objects
(pybind11_object_56, ...) introduced in 2.1 into a single
pybind11_object of a fixed size; this fixed size object allocates enough
space to contain either a simple object (one base class & small* holder
instance), or a pointer to a new allocation that can contain an
arbitrary number of base classes and holders, with holder size
unrestricted.
* "small" here means having a sizeof() of at most 2 pointers, which is
enough to fit unique_ptr (sizeof is 1 ptr) and shared_ptr (sizeof is 2
ptrs).
To minimize the performance impact, this repurposes
`internals::registered_types_py` to store a vector of pybind-registered
base types. For direct-use pybind types (e.g. the `PyA` for a C++ `A`)
this is simply storing the same thing as before, but now in a vector;
for Python-side inherited types, the map lets us avoid having to do a
base class traversal as long as we've seen the class before. The
change to vector is needed for multiple inheritance: Python types
inheriting from multiple registered bases have one entry per base.
| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| attr.h | Loading commit data... | |
| buffer_info.h | Loading commit data... | |
| cast.h | Loading commit data... | |
| chrono.h | Loading commit data... | |
| class_support.h | Loading commit data... | |
| common.h | Loading commit data... | |
| complex.h | Loading commit data... | |
| descr.h | Loading commit data... | |
| eigen.h | Loading commit data... | |
| embed.h | Loading commit data... | |
| eval.h | Loading commit data... | |
| functional.h | Loading commit data... | |
| numpy.h | Loading commit data... | |
| operators.h | Loading commit data... | |
| options.h | Loading commit data... | |
| pybind11.h | Loading commit data... | |
| pytypes.h | Loading commit data... | |
| stl.h | Loading commit data... | |
| stl_bind.h | Loading commit data... | |
| typeid.h | Loading commit data... |