mirror of
https://github.com/pybind/pybind11.git
synced 2024-12-03 10:27:12 +00:00
Changing PYBIND11_SMART_HOLDER_TYPE_CASTERS to use __VA_ARGS__.
This commit is contained in:
parent
ab590c624b
commit
1c8795a205
@ -773,28 +773,28 @@ struct smart_holder_type_caster<std::unique_ptr<T const, D>>
|
||||
|
||||
#ifndef PYBIND11_USE_SMART_HOLDER_AS_DEFAULT
|
||||
|
||||
# define PYBIND11_SMART_HOLDER_TYPE_CASTERS(T) \
|
||||
# define PYBIND11_SMART_HOLDER_TYPE_CASTERS(...) \
|
||||
namespace pybind11 { \
|
||||
namespace detail { \
|
||||
template <> \
|
||||
class type_caster<T> : public smart_holder_type_caster<T> {}; \
|
||||
class type_caster<__VA_ARGS__> : public smart_holder_type_caster<__VA_ARGS__> {}; \
|
||||
template <> \
|
||||
class type_caster<std::shared_ptr<T>> \
|
||||
: public smart_holder_type_caster<std::shared_ptr<T>> {}; \
|
||||
class type_caster<std::shared_ptr<__VA_ARGS__>> \
|
||||
: public smart_holder_type_caster<std::shared_ptr<__VA_ARGS__>> {}; \
|
||||
template <> \
|
||||
class type_caster<std::shared_ptr<T const>> \
|
||||
: public smart_holder_type_caster<std::shared_ptr<T const>> {}; \
|
||||
class type_caster<std::shared_ptr<__VA_ARGS__ const>> \
|
||||
: public smart_holder_type_caster<std::shared_ptr<__VA_ARGS__ const>> {}; \
|
||||
template <typename D> \
|
||||
class type_caster<std::unique_ptr<T, D>> \
|
||||
: public smart_holder_type_caster<std::unique_ptr<T, D>> {}; \
|
||||
class type_caster<std::unique_ptr<__VA_ARGS__, D>> \
|
||||
: public smart_holder_type_caster<std::unique_ptr<__VA_ARGS__, D>> {}; \
|
||||
template <typename D> \
|
||||
class type_caster<std::unique_ptr<T const, D>> \
|
||||
: public smart_holder_type_caster<std::unique_ptr<T const, D>> {}; \
|
||||
class type_caster<std::unique_ptr<__VA_ARGS__ const, D>> \
|
||||
: public smart_holder_type_caster<std::unique_ptr<__VA_ARGS__ const, D>> {}; \
|
||||
} \
|
||||
}
|
||||
#else
|
||||
|
||||
# define PYBIND11_SMART_HOLDER_TYPE_CASTERS(T)
|
||||
# define PYBIND11_SMART_HOLDER_TYPE_CASTERS(...)
|
||||
|
||||
template <typename T>
|
||||
class type_caster_for_class_ : public smart_holder_type_caster<T> {};
|
||||
|
@ -10,10 +10,10 @@
|
||||
|
||||
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
|
||||
|
||||
// Supports easier switching between py::class_<U> and py::class_<U, py::smart_holder>:
|
||||
// Supports easier switching between py::class_<T> and py::class_<T, py::smart_holder>:
|
||||
// users can simply replace the `_` in `class_` with `h` or vice versa.
|
||||
// Note though that the PYBIND11_SMART_HOLDER_TYPE_CASTERS(U) macro also needs to be
|
||||
// added (for `classh`) or commented out (for `class_`).
|
||||
// Note though that the PYBIND11_SMART_HOLDER_TYPE_CASTERS(T) macro also needs to be
|
||||
// added (for `classh`) or commented out (when falling back to `class_`).
|
||||
template <typename type_, typename... options>
|
||||
class classh : public class_<type_, smart_holder, options...> {
|
||||
public:
|
||||
|
Loading…
Reference in New Issue
Block a user