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

Q: Generate argument list at compile time

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

我想要这样的东西:

<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 值。正如我在开始时所说,我知道编译时的位集值。那么 我怎样才能生成像 (0,1,2,...,N - 1) 这样的参数列表?

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