当前位置:  开发笔记 > 编程语言 > 正文

如何将C++参数包映射到std :: pair对象序列?

如何解决《如何将C++参数包映射到std::pair对象序列?》经验,为你挑选了1个好方法。

我有一个可变参数模板函数foo():

template 
void foo(Args &&... args);

此函数旨在使用的所有参数调用size_t.我可以使用一些元编程来强制执行.我需要一次获取两个参数的结果列表,并将它们放入容器中std::pair.从概念上讲,类似于:

std::vector > = { 
    std::make_pair(args[0], args[1]), 
    std::make_pair(args[2], args[3]), ...
};

有一种直截了当的方法吗?我知道通过包扩展,我可以将参数放入一个扁平的容器中,但是有没有办法将它们两个一起分组到std::pair对象中?



1> Barry..:

索引到包中并不是真的可行(但是?),但索引到元组是.首先将所有内容都粘贴到一个元组中,然后随时将所有内容拉回来.因为一切都是size_t,我们可以复制:

template 
std::vector> 
foo_impl(std::index_sequence, Tuple tuple) {
    return std::vector >{ 
        std::make_pair(std::get<2*Is>(tuple), std::get<2*Is+1>(tuple))...
    };
}

template 
void foo(Args... args)
{
    auto vs = foo_impl(std::make_index_sequence{},
        std::make_tuple(args...));

    // ...
}

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有