Bring in default_holder_type from smart_holder branch including using it in pybind11/stl_bind.h

This commit is contained in:
Ralf W. Grosse-Kunstleve 2024-07-12 08:26:34 -07:00
parent d373a082ad
commit 63044cc199
3 changed files with 11 additions and 2 deletions

View File

@ -1111,6 +1111,12 @@ template <typename base, typename holder>
struct is_holder_type
: std::is_base_of<detail::type_caster_holder<base, holder>, detail::type_caster<holder>> {};
// Specializations for always-supported holders:
template <typename base, typename deleter>
struct is_holder_type<base, std::unique_ptr<base, deleter>> : std::true_type {};
template <typename base>
struct is_holder_type<base, pybindit::memory::smart_holder> : std::true_type {};
#ifdef PYBIND11_DISABLE_HANDLE_TYPE_NAME_DEFAULT_IMPLEMENTATION // See PR #4888
// This leads to compilation errors if a specialization is missing.

View File

@ -1775,6 +1775,9 @@ struct property_cpp_function<
}
};
template <typename>
using default_holder_type = pybindit::memory::smart_holder;
template <typename type_, typename... options>
class class_ : public detail::generic_type {
template <typename T>

View File

@ -487,7 +487,7 @@ PYBIND11_NAMESPACE_END(detail)
//
// std::vector
//
template <typename Vector, typename holder_type = std::unique_ptr<Vector>, typename... Args>
template <typename Vector, typename holder_type = default_holder_type<Vector>, typename... Args>
class_<Vector, holder_type> bind_vector(handle scope, std::string const &name, Args &&...args) {
using Class_ = class_<Vector, holder_type>;
@ -696,7 +696,7 @@ struct ItemsViewImpl : public detail::items_view {
PYBIND11_NAMESPACE_END(detail)
template <typename Map, typename holder_type = std::unique_ptr<Map>, typename... Args>
template <typename Map, typename holder_type = default_holder_type<Map>, typename... Args>
class_<Map, holder_type> bind_map(handle scope, const std::string &name, Args &&...args) {
using KeyType = typename Map::key_type;
using MappedType = typename Map::mapped_type;