是否可以通过for循环中的std :: tuple_cat组合元组,是否可以更改之前计算过的元组?
我想使用如下函数:
std::tuple<int> data;
for(int i = 0; i < max; i++)
{
/* ... some function which changes the value of data ... */
auto temp = std::tuple_cat(temp, data); // Add the new data to the previous tuple
}
逻辑上不可编译(在初始化之前不能使用temp)。我该如何解决这个问题?
答案 0 :(得分:1)
遵循for
循环中的逻辑,预计元组的大小会发生变化。
这是不可能的。因为元组的大小应该是编译时常量,所以不能使用相同的变量作为不同大小的元组。
答案 1 :(得分:0)
你可以做的是:
template <typename F, std::size_t ... Is>
auto tuple_generator_seq(F&& f, std::index_sequence<Is...>)
{
const decltype(f(0u)) arr[] = {f(Is)...}; // To force order of evaluation
return std::make_tuple(arr[Is]...);
}
template <std::size_t N, typename F>
auto tuple_generator(F&& f)
{
return tuple_generator_seq(f, std::make_index_sequence<N>());
}
int main()
{
auto data = 42;
auto t = tuple_generator<5>([&](int ){ return ++data; });
std::apply([](auto... e){ ((std::cout << e << " "), ...); }, t);
}