C ++ 14从可变参数模板创建向量

时间:2018-12-17 11:22:34

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

假设我有一个结构

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}

1 个答案:

答案 0 :(得分:12)

一个非常简单的扩展,可以在C ++ 11中使用:

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

(无需转发参考)

发生的是,矢量是用initializer list, constructed from the variadic parameter pack构造的,而applying a function(成员访问运算符)是每个可变参数的构造。