1 #ifndef SIPLASPLAS_REFLECTION_ATTRIBUTES_ATTRIBUTE_HPP 2 #define SIPLASPLAS_REFLECTION_ATTRIBUTES_ATTRIBUTE_HPP 5 #include <siplasplas/reflection/dynamic/object.hpp> 6 #include <siplasplas/reflection/dynamic/object_manip.hpp> 7 #include <siplasplas/utility/type_variables.hpp> 8 #include <siplasplas/reflection/dynamic/export.hpp> 13 namespace dynamic_reflection
19 class SIPLASPLAS_REFLECTION_DYNAMIC_EXPORT
Attribute 22 virtual std::vector<cpp::dynamic_reflection::Object> processArguments(
const std::vector<cpp::dynamic_reflection::Object>& args);
26 template<
typename AttrClass>
30 std::vector<cpp::dynamic_reflection::Object> processArguments(
const std::vector<cpp::dynamic_reflection::Object>& args)
override 32 return cpp::dynamic_reflection::tuple_to_vector(
33 cpp::dynamic_reflection::vector_call(&AttrClass::processArguments, static_cast<AttrClass&>(*
this), args)
39 return {
static_cast<AttrClass*
>(
this)->processReturnValue(
40 returnValue.get<cpp::function_argument<0, decltype(&AttrClass::processReturnValue)>>()
45 template<
typename Function>
48 template<
typename R,
typename Class,
typename... Args>
52 virtual std::tuple<Args...> processArguments(Args... args) = 0;
53 virtual R processReturnValue(
const R& returnValue) = 0;
56 std::vector<cpp::dynamic_reflection::Object> processArguments(
const std::vector<cpp::dynamic_reflection::Object>& args)
override 58 return cpp::dynamic_reflection::tuple_to_vector(
59 cpp::dynamic_reflection::vector_call(
static_cast<std::tuple<Args...
>(
AttributeFor::*)(Args...)>(processArguments), args)
65 return processReturnValue(returnValue.get<R>());
69 template<
template<
typename>
class Attribute,
typename... Args>
70 auto attribute_template_builder(Args&&... args)
72 return [&](
auto function_type)
84 #endif // SIPLASPLAS_REFLECTION_ATTRIBUTES_ATTRIBUTE_HPP Definition: messaging.hpp:8
Definition: attribute.hpp:27
Definition: attribute.hpp:46
Definition: object.hpp:16
Stores dynamic reflection information of a class type.
Definition: class.hpp:20
Definition: attribute.hpp:19