首页 > 解决方案 > C++14 从可变参数模板创建向量

问题描述

假设,我有一个结构

struct A
{
   std::string name;
};

并想编写从对象中读取字段“名称”并将它们返回为std::vector<std::string>. 是否可以通过可变参数模板(或任何非迭代方法)来做到这一点。我的目标是这样的:

template<typename... Ts>
std::vector<std::string> function(Ts... ts)
{
    ...
}

在程序中:

    A a1, a2, a3, a4;
    function(a1, a2, a3, a4);

输出:{a1.name, a2.name, a3.name, a4.name}

标签: c++templatesc++14variadic-templates

解决方案


在 C++11 中工作的一个非常简单的扩展:

template <typename ... Ts>
std::vector<std::string> function(Ts&& ... ts)
{
    return {std::forward<Ts>(ts).name...};
}

(不需要转发参考)

发生的情况是,向​​量是用初始化列表构造的,从可变参数 pack 构造,同时为每个可变元素应用一个函数(成员访问运算符)。


推荐阅读