27 #ifndef MLN_CORE_CONCEPT_META_ACCUMULATOR_HH
28 # define MLN_CORE_CONCEPT_META_ACCUMULATOR_HH
34 # include <mln/core/concept/object.hh>
35 # include <mln/core/concept/accumulator.hh>
38 # define mln_accu_with(A, T) \
39 typename mln::internal::accu_with_helper<A,T>::ret
41 # define mln_accu_with_(A, T) \
42 mln::internal::accu_with_helper<A,T>::ret
45 # define mln_meta_accu_result(A, T) \
46 typename mln::internal::meta_accu_ret_result_helper<A,T>::result
49 # define mln_meta_accu_result_(A, T) \
50 mln::internal::meta_accu_ret_result_helper<A,T>::result
59 template <
typename E>
struct Meta_Accumulator;
70 template <
typename A,
typename T>
71 struct meta_accu_ret_result_helper
73 typedef typename A::template with< T >::ret::result result;
81 template <
typename A,
typename T>
82 struct accu_with_helper
84 typedef typename A::template with< T >::ret
ret;
110 template <
typename E>
125 template <
typename M,
typename T>
129 template <typename M, typename T>
137 # ifndef MLN_INCLUDE_ONLY
139 template <
typename E>
149 template <
typename M,
typename T>
154 mlc_is_a(M, Meta_Accumulator)::check();
155 mln_accu_with(M, T) a;
161 # endif // ! MLN_INCLUDE_ONLY
166 #endif // ! MLN_CORE_CONCEPT_META_ACCUMULATOR_HH