首页 > 解决方案 > 基于范围的 for 循环与 auto 说明符结合 static_cast

问题描述

想象我有一个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
}

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

for (auto sv : v | static_cast<std::string_view>) {
    // do something with std::string_view
} 

标签: c++for-loopautoc++20

解决方案


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

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

推荐阅读