除了主题:异构序列生成器和可变模板异构容器 在下面的代码中,我尝试使用模板以循环方式处理对象序列 - 元组序列中的当前对象从前一个对象获取参数:
namespace spec
{
template <int... Idx>
struct index { };
template <int N, int... Idx>
struct sequence : sequence<N - 1, N - 1, Idx...> { };
template <int... Idx>
struct sequence<1, Idx...> : index<Idx...> { };
}
template<int N>
struct A
{
A() : _N(N) {}
template<int PrevN> void print_prevN(){std::cout<<PrevN<<std::endl;}
int _N;
};
template<int N>
struct B
{
B(): _N(N){}
template<int PrevN> void print_prevN(){std::cout<<PrevN<<std::endl;}
int _N;
};
template<typename...Arg>
class HeterogenousContainer
{
public:
void process(){process(spec::sequence<sizeof...(Arg)>());}
private:
std::tuple<Arg...> elements;
template <int... Idx> void process(spec::index<Idx...>)//this function generates an error
{auto aux = { (std::get<Idx>(elements).print_prevN<std::get<Idx-1>(elements)._N>(), 0) ... };}
};
int main()
{
HeterogenousContainer<A<3>, B<4>, B<2>> obj;
}
怎么了?
error: expected primary-expression before «)» token
该行中的此错误:
{auto aux = { (std::get<Idx>(elements).print_prevN<std::get<Idx-1>(elements)._N>(), 0) ... };}