35     template<
class naming_strategy_t>
 
   56 template<
class naming_strategy_t = rtti_naming_strategy_
class_name>
 
   65     using inheritance_tuple_type = std::tuple<this_class_type>;
 
   66     using naming_strategy_type   = naming_strategy_t;
 
   71     auto operator<=>(
const rtti_root&) 
const = 
default;
 
   74     bool is_derived_from() 
const noexcept
 
   76         constexpr 
class_id typeId = T::get_class_id_static();
 
   77         return _is_base_id(typeId) || typeId == get_class_id();
 
   81     bool is() 
const noexcept
 
   83         return get_class_id() == T::get_class_id_static();
 
   86     bool is(string_view svClassName) 
const noexcept
 
   88         return svClassName == get_class_name();
 
   93         return id == get_class_id();
 
   96     virtual bool is_derived_from_id(
class_id id) 
const noexcept
 
   98         return is_derived_from_id_static(
id);
 
  101     static constexpr 
bool is_derived_from_id_static(
class_id id) noexcept
 
  103         return id == get_class_id_static();
 
  106     static constexpr string_view get_class_name_static() noexcept
 
  111     virtual string_view get_class_name() 
const noexcept
 
  113         return get_class_name_static();
 
  116     static constexpr 
class_id get_class_id_static() noexcept
 
  118         constexpr 
class_id id = class_id::create<this_class_type>();
 
  122     virtual class_id get_class_id() 
const noexcept
 
  124         return get_class_id_static();
 
  127     virtual std::span<const class_id> get_inheritance_sequence() 
const = 0;
 
  132     virtual bool _is_base_id(
class_id idBase) 
const noexcept
 
  134         return idBase == get_class_id_static();
 
  142 constexpr 
auto rtti()
 
  144     return [](
const auto& value)
 
  146         return value.template is_derived_from<T>();
 
  159 #define QX_RTTI_CLASS(thisClass, ...)                                                                               \ 
  162     using this_class_type  = thisClass;                                                                             \ 
  163     using super_class_type = __VA_ARGS__;                                                                           \ 
  164     using base_class_type  = typename super_class_type::base_class_type;                                            \ 
  165     using inheritance_tuple_type =                                                                                  \ 
  166         qx::tuple_utils::join_t<typename super_class_type::inheritance_tuple_type, this_class_type>;                \ 
  169     static constexpr bool is_derived_from_id_static(qx::class_id id) noexcept                                       \ 
  171         return id == get_class_id_static() || super_class_type::is_derived_from_id_static(id);                      \ 
  173     virtual bool is_derived_from_id(qx::class_id id) const noexcept override                                        \ 
  175         static_assert(std::is_same_v<std::remove_cvref_t<decltype(*this)>, this_class_type>);                       \ 
  176         return is_derived_from_id_static(id);                                                                       \ 
  178     static constexpr qx::string_view get_class_name_static() noexcept                                               \ 
  180         return base_class_type::naming_strategy_type::get_name(qx::type_strings<this_class_type>::get_signature()); \ 
  182     virtual qx::class_id get_class_id() const noexcept override                                                     \ 
  184         return get_class_id_static();                                                                               \ 
  186     static constexpr qx::class_id get_class_id_static() noexcept                                                    \ 
  188         constexpr qx::class_id id = qx::class_id::create<this_class_type>();                                        \ 
  191     virtual qx::string_view get_class_name() const noexcept override                                                \ 
  193         return get_class_name_static();                                                                             \ 
  195     virtual std::span<const qx::class_id> get_inheritance_sequence() const override                                 \ 
  197         static constexpr auto ids = []()                                                                            \ 
  199             std::array<qx::class_id, std::tuple_size_v<inheritance_tuple_type>> ids_;                               \ 
  200             qx::tuple_utils::iterate<inheritance_tuple_type>(                                                       \ 
  201                 [&ids_]<class T, size_t I>()                                                                        \ 
  203                     ids_[I] = T::get_class_id_static();                                                             \ 
  211     virtual bool _is_base_id(qx::class_id base_id) const noexcept override                                          \ 
  213         return base_id == super_class_type::get_class_id_static() || super_class_type::_is_base_id(base_id);        \ 
Class id, unique for each class using qx rtti system.
 
The class allows you to get strings with information about the type, including its full name,...
 
Contains naming strategies for qx::rtti_root class.
 
Contains utils for working with std::tuple.