c++ - 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++11 中工作的一个非常简单的扩展:
template <typename ... Ts>
std::vector<std::string> function(Ts&& ... ts)
{
return {std::forward<Ts>(ts).name...};
}
(不需要转发参考)
发生的情况是,向量是用初始化列表构造的,从可变参数 pack 构造,同时为每个可变元素应用一个函数(成员访问运算符)。
推荐阅读
- python - 你如何在 Python 中随时间建模?
- python - pyparsing——用函数扩展fourFn.py示例
- google-apps-script - 带别名的 GmailApp.sendEmail 语法
- azure - Azure Web App 中用于容器的部署后脚本
- python - 如何使用 .get 在 Python 中通过列表框检索多个选择?
- php - 分配 $_SESSION 变量
- r - 为什么我的 sum() 函数不适用于 R 中的矩阵运算
- sql - 如何在 Rails 中选择通过连接到另一个具有多条记录的表的最新记录
- swift - Swift:Alamofire 和 URL 会话临时 Cookie 存储
- c# - 使用 .AddMonths(-1) 减去 DateTime Months 什么都不做?