带有自动说明符和 static_cast 的基于范围的 for 循环

康桓瑋*_*康桓瑋 1 c++ for-loop auto c++20

想象我有一个std::vectorof std::string,我想将它们转换std::stringstd::string_view基于范围的 for 循环:

auto v = std::vector<std::string>{"abc", "def", "ghi"};
for (std::string_view sv : v) {
    // do something with string_view
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是完全有效的,但我想保留说明auto符来做到这一点,如何static_cast在一行基于范围的 for 循环中进行这样的操作?好像 C++20ranges可以以简洁的方式做到这一点,有人可以举个例子吗?

for (auto sv : v | static_cast<std::string_view>) {
    // do something with std::string_view
} 
Run Code Online (Sandbox Code Playgroud)

Dav*_*ing 5

并不是说这是一个好主意,但这可能是一个更通用的转换概念(和一个邪恶的 lambda 技巧)的有用示例:

for(auto sv : v |
      views::transform([](std::string_view x) {return x;})) …
Run Code Online (Sandbox Code Playgroud)