在尝试回复 this question 时,我发现自己需要动态地为可变参数函数创建一堆参数,其中:
- 未给出参数个数
- 类型都相同,但未知(即使它们必须是默认可构造的)
在运行时,标准容器和for循环可用于执行此操作。
无论如何,我想在编译时生成一组参数,以便能够将它们转发给可变参数函数。
因此,std::tuple
似乎是显而易见的解决方案。
这里出现了一个问题:在编译时给定一个大小 N
和一个默认的可构造类型 T
,我如何编写一个函数来生成给定大小的元组?
我正在寻找这样的东西:
auto tup = gen<MyType, N>();
在 SO 上是一个 notable example一个基于递归生成器的结构,但我一直在努力寻找一个基于函数的解决方案,但我无法在任何地方找到它。
最佳答案
正确编写的转发函数(la std::apply
)应该与 std::array<T, N>
一起工作以及任何其他实现 std::tuple_size
的东西/std::get
界面。也就是说,
template<size_t, class T>
using T_ = T;
template<class T, size_t... Is>
auto gen(std::index_sequence<Is...>) { return std::tuple<T_<Is, T>...>{}; }
template<class T, size_t N>
auto gen() { return gen<T>(std::make_index_sequence<N>{}); }
关于c++ - 给定大小 N 和类型 T 生成元组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093920/