【发布时间】:2013-07-28 14:47:50
【问题描述】:
我需要实现一些具有异构元素的可变参数模板容器类,它允许通过这些元素进行迭代。我的第一个想法是使用带有可变参数的 std::tuple 成员创建类,但是通过类似数组的方式(通过循环)从元组中获取元素是不可能的:
struct A {void prnt(){std::cout<<"A\n";} };
struct B {void prnt(){std::cout<<"B\n";} };
struct C {void prnt(){std::cout<<"C\n";} };
template<typename...Arg>
struct Prc
{
Prc() : NumElems(sizeof...(Arg)), mems(std::make_tuple(Arg()...)){}
int NumElems;
std::tuple<Arg...> mems;
void process()
{
for(int i=0; i<NumElems; ++i)
std::get<i>(mems).prnt();//It's forbidden: "i" must be a constant
}
};
int main()
{
Prc<A,B,C> obj;
obj.process();
}
有什么想法吗?
附:我不想使用 boost 异构容器,例如 boost::variant 或 boost::any
【问题讨论】:
-
我不确定你所说的“大规模的方式”是什么意思。
标签: c++ c++11 metaprogramming compile-time