首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是多变量args的函数?

什么是多变量args的函数?
EN

Stack Overflow用户
提问于 2022-10-28 09:47:56
回答 3查看 405关注 0票数 10

我不明白这段代码是如何工作的。有人能给我一点启发吗。我很确定“参数包应该是最后一个参数”

代码语言:javascript
运行
复制
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之外的所有参数包都是空的,因此输出是

代码语言:javascript
运行
复制
args1:
args2:
args3:
1 2 3 4 5 6
EN

Stack Overflow用户

发布于 2022-10-28 10:10:01

如果允许的话,我如何分割arg1、args2和args3?

您不能。您可以使用std::tuple将模板包收集到一个参数中。

代码语言:javascript
运行
复制
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...>{});
}

看它的实况

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74233537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档