我不明白这段代码是如何工作的。有人能给我一点启发吗。我很确定“参数包应该是最后一个参数”
void foo(auto&&...args1, auto&&... args2, auto&&... args3) {
std::cout << "args1:\n", ((std::cout << args1 << " "), ...);
std::cout << "args2:\n", ((std::cout << args2 << " "), ...);
std::cout << "args3:\n", ((std::cout << args3 << " "), ...);
}
int main(int argc, char** argv)
{
foo(1,2,3,4,5,6);
}如果允许的话,我如何分割arg1、args2和args3?
编译器(g++-11)假定除args3之外的所有参数包都是空的,因此输出是
args1:
args2:
args3:
1 2 3 4 5 6发布于 2022-10-28 10:10:01
如果允许的话,我如何分割arg1、args2和args3?
您不能。您可以使用std::tuple将模板包收集到一个参数中。
template <typename... Args1, typename... Args2, typename... Args3>
void foo(std::tuple<Args1...> args1, std::tuple<Args2...> args2, std::tuple<Args3...> args3) {
auto out = []<std::size_t... Is>(std::string name, auto tup, std::index_sequence<Is...>)
{
std::cout << name << " ";
((std::cout << get<Is>(tup) << " "), ...);
std::cout << std::endl;
};
out("args1", args1, std::index_sequence_for<Args1...>{});
out("args2", args2, std::index_sequence_for<Args2...>{});
out("args3", args3, std::index_sequence_for<Args3...>{});
}https://stackoverflow.com/questions/74233537
复制相似问题