1 #ifndef SIPLASPLAS_TYPEERASURE_ANY_HPP     2 #define SIPLASPLAS_TYPEERASURE_ANY_HPP     4 #include "simpleany.hpp"     5 #include "function.hpp"     7 #include <siplasplas/utility/hash.hpp>    43     typename FunctionsStorage = Storage,
    44     typename FunctionArgsStorage = FunctionsStorage,
    45     typename AttributesStorage = FunctionsStorage
    56     template<
typename Class, 
typename... Args>
    57     static Any create(Args&&... args)
    70         template<
typename... Args>
    73             return (*_method)(_this->getReference(), std::forward<Args>(args)...);
    76         template<
typename... Args>
    79             return (*_method)(_this->getReference(), std::forward<Args>(args)...);
    82         template<
typename Callable>
    83         MethodProxy& 
operator=(Callable&& callable)
    85             *_method = std::forward<Callable>(callable);
    89         const Method& method()
 const   104     class ConstMethodProxy
   107         ConstMethodProxy(
const Method& method, 
const Any* this_) :
   112         template<
typename... Args>
   115             return (*_method)(_this->getReference(), std::forward<Args>(args)...);
   118         const Method& method()
 const   132             _attribute{&attribute},
   136         template<
typename Invokable>
   138             cpp::function_kind<std::decay_t<Invokable>>() == cpp::FunctionKind::MEMBER_OBJECT,
   141         operator=(Invokable&& invokable)
   143             (*_attribute) = std::forward<Invokable>(invokable);
   149             cpp::function_kind<std::decay_t<T>>() != cpp::FunctionKind::MEMBER_OBJECT,
   154             get<std::decay_t<T>>() = std::forward<T>(value);
   161             return _attribute->template getAs<T>(_this->simpleAny());
   173             return _attribute->template getAs<T>(_this->simpleAny());
   177         operator const T&() 
const   197     class ConstAttributeProxy
   200         ConstAttributeProxy(
const Attribute& attribute, 
const Any* this_) :
   201             _attribute{&attribute},
   208             return _attribute->template getAs<T>(_this->simpleAny());
   212         operator const T&() 
const   239         return {_methods[name], 
this};
   254         return {_methods[name], 
this};
   257     AttributeProxy operator[](
const std::string& name)
   259         return {_attributes[name], 
this};
   262     ConstAttributeProxy operator[](
const std::string& name)
 const   265         return {_attributes[name], 
this};
   277         auto it = _methods.find(name);
   279         if(it != _methods.end())
   281             return !it->second.empty();
   298         auto it = _attributes.find(name);
   300         if(it != _attributes.end())
   302             return !it->second.empty();
   369 #endif // SIPLASPLAS_TYPEERASURE_ANY_HPP ::cpp::SimpleAny< Storage > & simpleAny()
Returns the any object as a SimpleAny. 
Definition: any.hpp:313
 
SimpleAny & operator=(const T &value)
Assigns a value of type T. 
Definition: simpleany.hpp:548
 
const ::cpp::SimpleAny< Storage > & simpleAny() const 
Returns the any object as a SimpleAny. 
Definition: any.hpp:321
 
Definition: canary_allocator.hpp:7
 
Stores a type erased member object pointer. 
Definition: field.hpp:25
 
cpp::typeerasure::TypeInfo typeInfo() const 
Returns the type information of the hosted type. 
Definition: simpleany.hpp:516
 
bool hasMethod(const std::string &name) const 
Checks if the object has a method with a given name. 
Definition: any.hpp:275
 
std::unordered_map< Key, Value, Hash< Key >> HashTable
std::unordered_map alias using cpp::Hash as hash. 
Definition: hash.hpp:240
 
ConstMethodProxy operator()(const std::string &name) const 
Gives access to an object method. 
Definition: any.hpp:251
 
Implements a type-erased value container with minimal value semantics requirements. 
Definition: simpleany.hpp:15
 
MethodProxy operator()(const std::string &name)
Gives access to an object method. 
Definition: any.hpp:237
 
bool hasAttribute(const std::string &name) const 
Checks if the object has an attribute with a given name. 
Definition: any.hpp:296
 
Implements a type-erased object container with support for dynamic method and attribute invokation...
Definition: any.hpp:47
 
Stores a type-erased callable of any signature and kind. 
Definition: function.hpp:58
 
#define SIPLASPLAS_ASSERT(...)
Defines an assertion expression. 
Definition: assert.hpp:212