问:在编译时生成参数列表

时间:2017-01-11 12:00:31

标签: c++ templates arguments tuples metaprogramming

我试图在编译时创建一些元组,只是一个类型和一个bitset(代表某些操作的类型)。

我想要类似的东西:

<Foo1,0x001>, <Foo2,0x002>, <Foo3,0x003>...

这就是我有元数据结构的原因:

template < typename T,
           size_t Size >
struct Metadata {

  using type = T;

  std::bitset<Size>  bitset;
};

并且,感谢大家,make函数就是这样的:

template <typename...Ts,typename...Args>
constexpr auto make_metadata(Args... args)
{
    constexpr auto N = sizeof...(Ts);
    return std::make_tuple(Metadata<Ts, N>{args}...);
}

但我现在需要给它一个bitset值。我知道编译时的bitset值正如我在开头所说的那样。那么我怎样才能生成像(0,1,2,...,N-1)这样的参数列表?

1 个答案:

答案 0 :(得分:1)

使用C ++ 14,您可以使用std::integer_sequence and std::make_integer_sequence()生成单调递增整数的编译时参数包,这应该适用于您的用例。