메타 프로그래밍을 사용하여 재귀 적으로 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와 같은 종류의 루프를 수행하는 방법이 있습니다. 또는 뭔가 simmilar :
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 GEN :: set (w, 1) }> 또는 뭔가 simmilar? –
bua
@bua : 전혀 모르겠다. 나는'range_c'로 일한 적이 없다. 하지만'for_each'가 컴파일 타임에 확장되지 않았기 때문에 (그리고 내가 부스트를 볼 때까지) 작동하는지 의심 스럽습니다.MPL은 이에 대한 적절한 메커니즘을 제공하지 않습니다.) 하지만 당신은 * 올바른 코드에서 재귀 호출을 삽입 할 필요가 있습니다. (당신을 도울 수는 없지만'atomic_item을 모르므로 코드가 무엇을하는지 이해하지 못합니다. . GEN <1> :: 설정 (w, 1); 에서 (1 승) GEN <2> :: 설정,' –
@Kondrad는 지금은 (1 승) GEN <3> :: 세트를 달성하고 싶습니다 루프. – bua