From 3f7a1a1b30a8639c918fbf2530a08df306bcf27f Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Mon, 11 Jan 2021 21:15:07 -0800 Subject: [PATCH] Factoring out smart_holder_type_caster_load. --- tests/test_classh_wip.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/tests/test_classh_wip.cpp b/tests/test_classh_wip.cpp index bdcd3323c..a6e20e633 100644 --- a/tests/test_classh_wip.cpp +++ b/tests/test_classh_wip.cpp @@ -44,8 +44,22 @@ namespace detail { using namespace pybind11_tests::classh_wip; +template +struct smart_holder_type_caster_load { + bool load(handle src, bool /*convert*/) { + if (!isinstance(src)) return false; + auto inst = reinterpret_cast(src.ptr()); + auto v_h = inst->get_value_and_holder(get_type_info(typeid(T))); + smhldr_ptr = &v_h.holder(); + return true; + } + + protected: + pybindit::memory::smart_holder* smhldr_ptr = nullptr; +}; + template <> -struct type_caster { +struct type_caster : smart_holder_type_caster_load { static constexpr auto name = _(); // static handle cast(mpty, ...) @@ -100,17 +114,6 @@ struct type_caster { operator mpty&() { return smhldr_ptr->lvalue_ref(); } operator mpty const*() { return smhldr_ptr->as_raw_ptr_unowned(); } operator mpty*() { return smhldr_ptr->as_raw_ptr_unowned(); } - - bool load(handle src, bool /*convert*/) { - if (!isinstance(src)) return false; - auto inst = reinterpret_cast(src.ptr()); - auto v_h = inst->get_value_and_holder(get_type_info(typeid(mpty))); - smhldr_ptr = &v_h.holder(); - return true; - } - - private: - pybindit::memory::smart_holder* smhldr_ptr = nullptr; }; template <>