gpt4 book ai didi

c++ - 序列元组

转载 作者:太空狗 更新时间:2023-10-29 23:43:55 26 4
gpt4 key购买 nike

我想将一个类序列存储到一个元组中,并将这个序列声明为另一个类的成员:

template<size_t id> class Foo {};

template<size_t N>
class FooContainer
{
std::tuple<Foo<0>, Foo<1>, ..., Foo<N>> tup; // build this type at compile time ??
};

我试过这个:

template<size_t N>
class FooContainer
{
template<size_t... id>
struct FoosImpl {
constexpr FoosImpl(std::index_sequence<id...>) {};
using type = std::tuple<Foo<id>...>;
};

template<size_t N, typename Indices = std::make_index_sequence<N>>
using Foos = decltype(FoosImpl(Indices())::type);

Foos<N> tup;
};

但这不能编译。海湾合作委员会提示:错误:使用 Foos = decltype(FoosImpl(Indices())::type); 之前缺少“(”标记之前的模板参数

我认为编译器不需要指定模板,它会从 Indices() 中推导出整数序列。但事实并非如此。

最佳答案

这里有一种可能的方式来做你想做的事:

#include <tuple>

template<size_t id> class Foo {};

template <size_t... Idx>
std::tuple<Foo<Idx>...> get_foos(std::index_sequence<Idx...>);

template <size_t N>
using foo_tuple = decltype(get_foos(std::make_index_sequence<N>{}));

template<size_t N>
class FooContainer {
foo_tuple<N> tup;
};

您不能(目前)让编译器推导类模板参数(正如您需要使用 FoosImpl),但您可以让它推导函数的模板参数并使用返回类型。

关于c++ - 序列元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39041236/

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