Mirror reflection library 0.5.13
|
00001 00010 #ifndef MIRROR_INVOKER_1011291729_HPP 00011 #define MIRROR_INVOKER_1011291729_HPP 00012 00013 #include <mirror/auxiliary/func_call.hpp> 00014 00015 MIRROR_NAMESPACE_BEGIN 00016 00021 00022 00049 template < 00050 template <class, class> class Manufacturer, 00051 template <class, class> class Suppliers, 00052 template <class, class> class Enumerator, 00053 class SourceTraits, 00054 typename MetaFunction 00055 > class invoker : public aux::base_fn_caller< 00056 Manufacturer, 00057 Suppliers, 00058 Enumerator, 00059 SourceTraits, 00060 MetaFunction, 00061 typename parameters<MetaFunction>::type, 00062 typename mp::make_index_seq< 00063 typename mp::size< 00064 typename parameters<MetaFunction>::type 00065 >::type 00066 >::type 00067 > 00068 { 00069 private: 00070 typedef typename aux::base_fn_caller< 00071 Manufacturer, 00072 Suppliers, 00073 Enumerator, 00074 SourceTraits, 00075 MetaFunction, 00076 typename parameters<MetaFunction>::type, 00077 typename mp::make_index_seq< 00078 typename mp::size< 00079 typename parameters<MetaFunction>::type 00080 >::type 00081 >::type 00082 > base_class; 00083 public: 00084 template <typename Param> 00085 invoker(Param param) 00086 : base_class(param) 00087 { } 00088 }; 00089 00090 00092 00151 template < 00152 template <class, class> class Manufacturer, 00153 template <class, class> class Suppliers, 00154 template <class, class> class Enumerator, 00155 class SourceTraits 00156 > struct invoker_maker 00157 { 00159 00165 template <typename MetaFunction> 00166 struct invoker 00167 { 00168 typedef mirror::invoker< 00169 Manufacturer, 00170 Suppliers, 00171 Enumerator, 00172 SourceTraits, 00173 MetaFunction 00174 > type; 00175 }; 00176 }; 00177 00178 MIRROR_NAMESPACE_END 00179 00180 #endif //include guard 00181