libebml_ng
Public Types | Public Member Functions | Protected Member Functions | List of all members
ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t > Class Template Reference

CRTP template for EBML Element instances. More...

#include <ebmlElement.h>

Inheritance diagram for ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >:
ebml::ebmlDataElement< T > ebml::ebmlDataElement< K >

Public Types

using ebmltype = ebmltype_t
 

Public Member Functions

template<typename... Args>
 ebmlElementCRTP (const ebmltype_t *cls, Args &&... args)
 
const ebmltype_t & cls () const
 
ebml::ptr< ebmlinst_t > sp ()
 
ebml::ptr< const ebmlinst_t > sp () const
 
ebml::wptr< ebmlinst_t > wp ()
 
ebml::wptr< const ebmlinst_t > wp () const
 
ebml::ptr< ebmlinst_t > clone () const
 
ebml::ptr< ebmlElementsp ()
 Returns a shared pointer to the element instance. More...
 
ebml::ptr< const ebmlElementsp () const
 Returns a shared pointer to a const element. More...
 
template<typename T >
ebml::ptr< T > sp ()
 
template<typename T >
ebml::ptr< T > sp () const
 
ebml::wptr< ebmlElementwp ()
 
ebml::wptr< const ebmlElementwp () const
 
template<typename T >
ebml::wptr< T > wp ()
 
template<typename T >
ebml::wptr< T > wp () const
 

Protected Member Functions

ebmlElement_clone () const
 

Detailed Description

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
class ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >

CRTP template for EBML Element instances.

This template implements the Curiously Recurring Template Pattern (CRTP) to provide type-safe behavior for EBML element instances. By inheriting from this template, concrete element instance classes gain automated, type-safe casting and cloning functionalities, which simplifies memory management and promotes a robust API.

Template Parameters
ebmltype_tThe concrete element type class associated with this instance.
ebmlinst_tThe concrete element instance class using this CRTP mixin.
instbase_tThe base element instance class (default is ebml::ebmlElement).
See also
Using the CRTP Mixins for detailed usage instructions.
ebml::ebmlTypeCRTP<ebmltype_t, ebmlinst_t, typebase_t>
ebml::ebmlElement

Member Typedef Documentation

◆ ebmltype

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
using ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::ebmltype = ebmltype_t

Constructor & Destructor Documentation

◆ ebmlElementCRTP()

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
template<typename... Args>
ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::ebmlElementCRTP ( const ebmltype_t *  cls,
Args &&...  args 
)
inline

Member Function Documentation

◆ _clone()

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebmlElement* ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::_clone ( ) const
protected

◆ clone()

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::ptr<ebmlinst_t> ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::clone ( ) const

◆ cls()

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
const ebmltype_t& ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::cls ( ) const

◆ sp() [1/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::ptr< ebmlElement > ebml::ebmlElement::sp

Returns a shared pointer to the element instance.

Returns
The shared pointer version of this element.

◆ sp() [2/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::ptr< const ebmlElement > ebml::ebmlElement::sp

Returns a shared pointer to a const element.

Returns
The shared pointer (const) version of this element.

◆ sp() [3/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
template<typename T >
ebml::ptr<T> ebml::ebmlElement::sp ( typename T  )
inline

◆ sp() [4/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
template<typename T >
ebml::ptr<T> ebml::ebmlElement::sp ( typename T  )
inline

◆ sp() [5/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::ptr<ebmlinst_t> ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::sp ( )

◆ sp() [6/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::ptr<const ebmlinst_t> ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::sp ( ) const

◆ wp() [1/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
template<typename T >
ebml::wptr< T > ebml::ebmlElement::wp ( typename T  )
inline

◆ wp() [2/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::wptr< ebmlElement > ebml::ebmlElement::wp

◆ wp() [3/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::wptr< const ebmlElement > ebml::ebmlElement::wp

◆ wp() [4/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
template<typename T >
ebml::wptr< T > ebml::ebmlElement::wp ( typename T  )
inline

◆ wp() [5/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::wptr<ebmlinst_t> ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::wp ( )

◆ wp() [6/6]

template<typename ebmltype_t, typename ebmlinst_t, typename instbase_t = ebmlElement>
ebml::wptr<const ebmlinst_t> ebml::ebmlElementCRTP< ebmltype_t, ebmlinst_t, instbase_t >::wp ( ) const

The documentation for this class was generated from the following file: