我嘗試使用元編程調用函數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
函數已被調用一次...
EDIT
有沒有辦法做一種循環與f or_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);
在循環。
有沒有一種方法可以用for_each或其他東西來做循環: for_each f {operator()(T i)GEN :: set(w,1) }> 或類似的東西? –
bua
2011-01-12 21:45:13