【发布时间】:2020-06-09 21:53:44
【问题描述】:
考虑以下使用折叠表达式打印参数的函数。
template <typename... T>
void print(T &&... t)
{
(std::cout << ... << t) << '\n';
}
考虑调用它的第二个函数:
template <typename T, T... vals>
void call_print(std::integer_sequence<T, vals...> &&)
{
print(vals...); //ok: prints 01234
}
call_print(std::make_index_sequence<5>{});
在我的用例中,我需要以这种方式调用print(使用折叠表达式)
template <typename T, T... vals>
void call_print2(std::integer_sequence<T, vals...> &&)
{
print((vals, ...)); //not OK: only prints 4
}
call_print2(std::make_index_sequence<5>{});
在这种情况下,调用看起来像这样
print(0,(1,(2,(3,4))));
但该函数似乎只捕获最后一个参数,就好像我这样称呼它:
print(4);
任何帮助将不胜感激
编辑:我真正想要完成的事情
template<typename T, T ... ints>
auto make_seq(std::integer_sequence<T, ints...>&&)
{
auto lambda = []<T val>()->T{/*implementation doesn't matter*/};
return std::integer_sequence<T, (lambda.template operator()<ints>(), ...)>{}; //<- right here
}
【问题讨论】:
-
你的意思是要反向打印?
-
不,我想传递一个折叠表达式
-
您正在折叠逗号运算符,因此将一个参数传递给
print。这没有任何意义。你能举个例子说明你真正想要实现的目标吗? -
你希望调用输出什么?
-
我的意思是
std::integer_sequence<T, lambda.template operator()<ints>() ...>{};(因错字而编辑)
标签: c++ c++17 fold-expression