13 #include <type_traits>
18 template<
class T,
class base_t>
19 concept sbo_poly_assignable_c = std::is_base_of_v<base_t, T> && std::is_move_constructible_v<T>;
34 template<
class base_t,
size_t nSBOSize_>
37 struct sbo_poly_traits
39 using size_type = size_t;
40 static_assert(nSBOSize_ >
sizeof(
void*));
41 static constexpr size_type nSBOSize = nSBOSize_ -
sizeof(
void*);
42 static constexpr
bool bShrinkToFitWhenSmall =
true;
54 template<sbo_poly_assignable_c<base_t> derived_t>
66 template<sbo_poly_assignable_c<base_t> derived_t>
76 template<sbo_poly_assignable_c<base_t> derived_t>
77 void assign(derived_t
object) noexcept;
80 base_t* operator->() noexcept;
81 const base_t* operator->() const noexcept;
87 base_t&
get() noexcept;
93 const base_t&
get() const noexcept;
102 #include <qx/sbo/sbo_poly.inl>
Small Buffer Object for polymorphic classes.
base_t & get() noexcept
Get object reference. Always valid.
sbo_poly(derived_t object) noexcept
sbo_poly object constructor
sbo_poly & operator=(derived_t object) noexcept
operator=
void assign(derived_t object) noexcept
Assign a new object to this SBO.