【发布时间】:2017-01-10 19:17:28
【问题描述】:
今天我正在尝试在编译时创建一个稍微具体的元组(至少对我而言)。
我有一些基本结构,比如说:
struct Foo1 { int data; };
struct Foo2 { int data; };
struct Foo3 { int data; };
还有另一个结构,但带有一些模板内容:
template < typename T,
size_t Size >
struct Metadata {
using type = T;
std::bitset<Size> bitset;
};
所以现在我想创建这种元组:
constexpr std::tuple<Metadata<Foo1, 3>, Metadata<Foo2, 3>, Metadata<Foo3, 3>> test { {0}, {0}, {0}};
但是以一种自动的方式,更像是:
template < typename ... Ts >
constexpr auto make_metadata() {
return std::tuple<Metadata<Foo1, sizeof...(Ts)>,
Metadata<Foo2, sizeof...(Ts)>,
Metadata<Foo3, sizeof...(Ts)>>{{0},{0},{0}};
}
最后一个代码远不是很好,所以我想要一个类似的但自动的东西。也许使用 tuple_cat 和 fold 表达式,但我有点迷茫。所以如果有人知道答案:)
【问题讨论】:
标签: c++ templates tuples metaprogramming