c++ - 基于范围的 for 循环与 auto 说明符结合 static_cast
问题描述
想象我有一个std::vector
of std::string
,我想将它们转换std::string
为std::string_view
基于范围的 for 循环:
auto v = std::vector<std::string>{"abc", "def", "ghi"};
for (std::string_view sv : v) {
// do something with string_view
}
上面的代码是完全有效的,但我想保留说明auto
符来做到这一点,如何static_cast
在一行基于范围的 for 循环中做这样的事情?似乎C ++ 20ranges
可以简洁地做到这一点,有人可以举个例子吗?
for (auto sv : v | static_cast<std::string_view>) {
// do something with std::string_view
}
解决方案
并不是说这是一个好主意,但这可能是一个更通用的变换概念的有用示例(以及一个邪恶的 lambda 技巧):
for(auto sv : v |
views::transform([](std::string_view x) {return x;})) …
推荐阅读
- php - 模型关系在其他任何地方都可以正常工作,但是在广播方面我得到了 RelationNotFoundException
- reactjs - ReactJS - 用 chartJS-2 标记多维数组
- powershell - Powershell get-aduser 格式化 Write-Host
- javascript - 未找到外部依赖/回购
- gsm - 如何终止拨出 CSD 通话?
- node.js - 如何连接到 mongodb atlas 集群以使用节点 js 创建新数据库
- node.js - jsonwebtoken 在 nodejs 版本 10x 中返回 null
- python-3.x - 如何让 jupyter 脚本在 ubuntu 液滴上 24/7 全天候运行
- c# - 以静默模式运行可执行文件
- python - 如何从包含多个人名的电子邮件中提取发件人姓名?