Mirror reflection library - Puddle compile-time layer 0.5.13
|
00001 00012 #ifndef PUDDLE_PUDDLE_1103151324_HPP 00013 #define PUDDLE_PUDDLE_1103151324_HPP 00014 00015 #include <puddle/config.hpp> 00016 #include <puddle/categories.hpp> 00017 #include <puddle/specifiers.hpp> 00018 #include <puddle/auxiliary/wrap.hpp> 00019 #include <puddle/auxiliary/integer.hpp> 00020 #include <puddle/auxiliary/range.hpp> 00021 #include <puddle/auxiliary/meta_objects.hpp> 00022 #include <puddle/auxiliary/meta_instance.hpp> 00023 #include <mirror/mirror_fwd.hpp> 00024 00025 00047 PUDDLE_NAMESPACE_BEGIN 00048 00056 template <typename Type> 00057 struct reflected 00058 { 00059 typedef typename aux::wrap< 00060 typename mirror::reflected<Type>::type 00061 >::type type; 00062 }; 00063 00065 00076 template <typename Type> 00077 typename reflected<Type>::type reflected_type(void) 00078 { 00079 return typename reflected<Type>::type(); 00080 } 00081 00083 00089 template <typename MirrorMetaObject> 00090 typename aux::wrap<MirrorMetaObject>::type adapt(void) 00091 { 00092 return typename aux::wrap<MirrorMetaObject>::type(); 00093 } 00094 00095 template <class MetaFreeVariable> 00096 inline decltype(aux::meta_free_variable_instance<MetaFreeVariable>()) 00097 instance_of(aux::meta_free_variable<MetaFreeVariable> var) 00098 { 00099 return aux::meta_free_variable_instance<MetaFreeVariable>(); 00100 } 00101 00102 PUDDLE_NAMESPACE_END 00103 00104 #endif //include guard 00105