C++14 从可变参数模板创建向量
C++14 Create vector from variadic templates
假设,我有一个结构
struct A
{
std::string name;
};
并想编写从对象和 return 中读取字段 "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++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, while (成员访问运算符)构造的。
假设,我有一个结构
struct A
{
std::string name;
};
并想编写从对象和 return 中读取字段 "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++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, while