假设我有一个结构
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}
答案 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(成员访问运算符)是每个可变参数的构造。