今天我試圖創建一個具有一點特定的元組(至少對我來說)和編譯時。創建一個包含variatic類型的元組
我有一些基本的結構,讓說:
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 + + 17我不必明確地把std :: make_tuple。但是,由於你和Guillaume無論如何:) –
@MathieuVanNevel當然,你可以保存5個字符,只需寫'std :: tuple(...)'。 – Barry