C++ 如何迭代boost::fusion序列?

C++ 如何迭代boost::fusion序列?,c++,boost,lua,boost-fusion,C++,Boost,Lua,Boost Fusion,我正在尝试初始化一个参数列表,以便与fusion::invoke一起使用。 参数的格式如下: template <typename Type> struct ArgWrapper { inline ArgWrapper(){} inline void Setup(lua_State*L,int idx) { //setup this value from the lua state... //in reality this cl

我正在尝试初始化一个参数列表,以便与fusion::invoke一起使用。 参数的格式如下:

template <typename Type>
struct ArgWrapper
{
    inline ArgWrapper(){}
    inline void Setup(lua_State*L,int idx)
    {
        //setup this value from the lua state...
        //in reality this class is specialised for different lua types
    }
    operator Type(){return value;}
    Type value;
};
模板
结构ArgWrapper
{
内联ArgWrapper(){}
内联无效设置(lua_状态*L,int idx)
{
//从lua状态设置此值。。。
//实际上,这个类专门针对不同的lua类型
}
运算符类型(){返回值;}
类型值;
};
比如说,我能做到

int add(int a,int b){return a+b;}
fusion::vector<ArgsWrapper<int>,ArgsWrapper<int> > v;
fusion::at_c<0>(v).value=1;
fusion::at_c<1>(v).value=2;
std::cout<<fusion::invoke(add,v)//prints 3
intadd(inta,intb){返回a+b;}
融合::向量v;
熔合:at_c(v)。值=1;
熔合:at_c(v)。值=2;

好吧,我想起来了。我需要使用结构:

template <typename ArgWrapperList,u32 N=mpl::size<ArgWrapperList>::value-1>
struct ArgWrapperListFiller
{
    static inline void Setup(ArgWrapperList &args,lua_State*L)
    {
        fusion::at_c<N>(args).Setup(L,N+1);
        ArgWrapperListFiller<ArgWrapperList,N-1>::Setup(args,L);
    }
};
template <typename ArgWrapperList> //base case, do not recurse
struct ArgWrapperListFiller<ArgWrapperList,0>
{
    static inline void Fill(ArgWrapperList &args,lua_State*L)
    {
        fusion::at_c<0>(args).Setup(L,1);
    };
};
模板
结构ArgWrapperListFiller
{
静态内联无效设置(ArgWrapperList&args,lua_State*L)
{
fusion::at_c(args).Setup(L,N+1);
ArgWrapperListFiller::设置(args,L);
}
};
模板//基本情况,不递归
结构ArgWrapperListFiller
{
静态内联空白填充(ArgWrapperList&args,lua_State*L)
{
fusion::at_c(args).Setup(L,1);
};
};

好的,我想出来了。我需要使用结构:

template <typename ArgWrapperList,u32 N=mpl::size<ArgWrapperList>::value-1>
struct ArgWrapperListFiller
{
    static inline void Setup(ArgWrapperList &args,lua_State*L)
    {
        fusion::at_c<N>(args).Setup(L,N+1);
        ArgWrapperListFiller<ArgWrapperList,N-1>::Setup(args,L);
    }
};
template <typename ArgWrapperList> //base case, do not recurse
struct ArgWrapperListFiller<ArgWrapperList,0>
{
    static inline void Fill(ArgWrapperList &args,lua_State*L)
    {
        fusion::at_c<0>(args).Setup(L,1);
    };
};
模板
结构ArgWrapperListFiller
{
静态内联无效设置(ArgWrapperList&args,lua_State*L)
{
fusion::at_c(args).Setup(L,N+1);
ArgWrapperListFiller::设置(args,L);
}
};
模板//基本情况,不递归
结构ArgWrapperListFiller
{
静态内联空白填充(ArgWrapperList&args,lua_State*L)
{
fusion::at_c(args).Setup(L,1);
};
};
template <typename ArgWrapperList,u32 N=mpl::size<ArgWrapperList>::value-1>
struct ArgWrapperListFiller
{
    static inline void Setup(ArgWrapperList &args,lua_State*L)
    {
        fusion::at_c<N>(args).Setup(L,N+1);
        ArgWrapperListFiller<ArgWrapperList,N-1>::Setup(args,L);
    }
};
template <typename ArgWrapperList> //base case, do not recurse
struct ArgWrapperListFiller<ArgWrapperList,0>
{
    static inline void Fill(ArgWrapperList &args,lua_State*L)
    {
        fusion::at_c<0>(args).Setup(L,1);
    };
};