gpt4 book ai didi

c++ - 创建一个包含可变类型的元组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:38 25 4
gpt4 key购买 nike

今天我试图在编译时创建一个有点具体(至少对我而言)的元组。

我有一些基本的结构,比方说:

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 和折叠表达式,但我有点迷路了。所以如果有人知道答案:)

最佳答案

您可以使用 ... 在单个表达式中表示多个内容。在这种情况下,您希望立即和非立即展开 Ts:

template <class... Ts>
constexpr auto make_metadata()
{
return std::make_tuple(Metadata<Ts, sizeof...(Ts)>{0}...);
}

此外,如果这样写更清楚,您不必将所有内容都写在一行中:

template <class... Ts>
constexpr auto make_metadata()
{
constexpr size_t N = sizeof...(Ts);
return std::make_tuple(Metadata<Ts, N>{0}...);
}

关于c++ - 创建一个包含可变类型的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com