Я пытаюсь вызвать функцию void set (...) рекурсивно, используя метапрограммирование.
Проблема в том, что она вызывается только один раз.
template <int N>
struct GEN
{
enum {value = GEN<N-1>::value};
template <typename T>
static inline void set(T& tup, int l_item)
{
cout<<"item value: "<<l_item<<", N-1: "<< N-1 << ", value: "<<value <<endl;
typedef typename boost::tuples::element<N-1, T>::type _el_type;
get<N-1>(tup) = atomic_item<N-1, _el_type>(l_item);
};
};
template<>
struct GEN<0>
{
enum {value = 0};
template <typename T>
static inline void set(T& tup, int l_item)
{
typedef typename boost::tuples::element<0, T>::type _el_type;
get<0>(tup) = atomic_item<0, _el_type>(l_item);
};
};
main(){
....
/** this is how i try to invoke it */
GEN<3>::set(w,1);
}
Вывод:
значение элемента: 1, N-1: 2, значение: 0
Функция вызывается только один раз ...
РЕДАКТИРОВАТЬ
Есть ли способ сделать цикл с for_each или что-то еще, чтобы получить что-то похожее:
for_each<range_c<int,0,3> f{operator()(T i)GEN<typename T::value>::set(w,1)}>
или что-то подобное для достижения вызова для всех этих элементов?
В частности, я хотел бы иметь это:
GEN<3>::set(w,1);
GEN<2>::set(w,1);
GEN<1>::set(w,1);
В цикле.