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

Pio*_*odo 6 c++ templates variadic-templates c++14

假设,我有一个结构

struct A
{
   std::string name;
};
Run Code Online (Sandbox Code Playgroud)

并且想要编写从对象读取字段"name"并将其作为返回的函数std::vector<std::string>.是否可以通过可变参数模板(或任何非迭代方法)来完成此操作.我的目标是这样的:

template<typename... Ts>
std::vector<std::string> function(Ts... ts)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

在程序中:

    A a1, a2, a3, a4;
    function(a1, a2, a3, a4);
Run Code Online (Sandbox Code Playgroud)

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

Log*_*uff 12

一个非常简单的扩展,适用于C++ 11:

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

(不需要转发参考)

所发生的是,向量是用初始化列表构造的,由变量参数包构造,同时为每个可变元素应用函数(成员访问运算符).

  • 对不起,刚发现成员变量也是rvalue(/sf/answers/602645851/).不知道这条规则. (3认同)