siplasplas
A library for C++ reflection and introspection
|
Implements a type-erased object container with support for dynamic method and attribute invokation. More...
#include <siplasplas/typeerasure/any.hpp>
Public Types | |
using | Base = SimpleAny< Storage > |
using | Method = cpp::typeerasure::Function< FunctionsStorage, FunctionArgsStorage > |
using | Attribute = cpp::typeerasure::Field< AttributesStorage > |
Public Member Functions | |
MethodProxy | operator() (const std::string &name) |
Gives access to an object method. More... | |
ConstMethodProxy | operator() (const std::string &name) const |
Gives access to an object method. More... | |
AttributeProxy | operator[] (const std::string &name) |
ConstAttributeProxy | operator[] (const std::string &name) const |
bool | hasMethod (const std::string &name) const |
Checks if the object has a method with a given name. More... | |
bool | hasAttribute (const std::string &name) const |
Checks if the object has an attribute with a given name. More... | |
::cpp::SimpleAny< Storage > & | simpleAny () |
Returns the any object as a SimpleAny. | |
const ::cpp::SimpleAny< Storage > & | simpleAny () const |
Returns the any object as a SimpleAny. | |
Public Member Functions inherited from cpp::SimpleAny< Storage > | |
SimpleAny () | |
Constructs an empty SimpleAny. | |
bool | empty () const |
Checks whether the any has an object hosted in or if is empty. More... | |
template<typename T , typename = std::enable_if_t< !std::is_base_of< SimpleAny, std::decay_t<T> >::value >> | |
SimpleAny (const T &value) | |
Constructs an any of type T from an lvalue of type T. More... | |
template<typename OtherStorage > | |
SimpleAny (const SimpleAny< OtherStorage > &other) | |
template<typename OtherStorage > | |
SimpleAny (SimpleAny< OtherStorage > &&other) | |
SimpleAny (const SimpleAny &other) | |
SimpleAny (SimpleAny &&other) | |
template<typename T > | |
bool | hasType () const |
Checks if the any has a value of type T. More... | |
template<typename T > | |
const std::decay_t< T > & | get () const |
Returns a readonly reference to the hosted object. More... | |
template<typename T > | |
std::decay_t< T > & | get () |
Returns a reference to the hosted object. More... | |
cpp::typeerasure::TypeInfo | typeInfo () const |
Returns the type information of the hosted type. | |
cpp::SimpleAny< cpp::NonOwningStorage > | getReference () |
Returns a reference any to the hosted object. | |
cpp::SimpleAny< cpp::ConstNonOwningStorage > | getReference () const |
Returns a const reference any to the hosted object. | |
template<typename T > | |
SimpleAny & | operator= (const T &value) |
Assigns a value of type T. More... | |
SimpleAny & | operator= (const SimpleAny &other) |
SimpleAny & | operator= (SimpleAny &&other) |
const Storage & | getStorage () const |
Returns the storage backend of the SimpleAny object. | |
Static Public Member Functions | |
template<typename Class , typename... Args> | |
static Any | create (Args &&...args) |
Static Public Member Functions inherited from cpp::SimpleAny< Storage > | |
template<typename T , typename... Args> | |
static SimpleAny | create (Args &&...args) |
Constructs a SimpleAny with an in-place constructed value of type T. More... | |
Implements a type-erased object container with support for dynamic method and attribute invokation.
cpp::Any extends the interface of cpp::SimpleAny to add dynamic manipulation of the object's interface. cpp::Any keeps track of a set of methods and attributes the instace has assigned, so it can behave as an instance of a class with its interface and associated data members:
The behavior is undefined if the user access a method or attribute the any object doesn't have
Storage | Storage for the type erased object |
FunctionsStorage | Storage for the type erased methods. Storage by default |
FunctionArgsStorage | Storage for the type erased method call arguments. FunctionsStorage by default |
AttributesStorage | Storage for the type erased attributes. Storage by default |
|
inline |
Checks if the object has an attribute with a given name.
name | name of the attribute |
|
inline |
Checks if the object has a method with a given name.
name | name of the method |
|
inline |
Gives access to an object method.
name | Name of the object. If the object has no method with that name, the behavior is undefined |
|
inline |
Gives access to an object method.
name | Name of the object. If the object has no method with that name, the behavior is undefined |