我正在尝试使用Microsoft Visual Studio2019学习C++20中的范围。
我创建了一个函数来使字符串小写,并将所有空格替换为“_”。
template <typename R>
auto cpp20_string_to_lowercase_without_spaces( R&& rng )
{
auto view = rng
| std::ranges::views::transform( ::tolower )
| std::ranges::views::common;
std::ranges::replace( view, ' ', '_' );
return view;
}我得到了以下错误:
Error C2672 'operator __surrogate_func': no matching overloaded function found
Error C7602 'std::ranges::_Replace_fn::operator ()': the associated constraints are not satisfied在调用std::ranges::replace之前,我尝试使用view.begin(), view.end(),我尝试使用std::ranges::copy。
是不是我做错了什么?
PS:在项目设置中,我不得不选择Preview - Features from the Latest C++ Working Draft (/std:c++latest),因为使用带有最新版本Visual Studio2019预览版的ISO C++20 Standard (/std:c++20)时,我无法在没有编译错误的情况下使用视图。
发布于 2021-09-21 22:10:14
transform会创建一个不可修改的视图。具体地说,它创建了一个包含按需制造的对象的范围。它们没有永久的、固定的存储,所以它们不能被其他东西“替换”。
您可以将范围复制到容器中,然后在容器上执行替换操作。
https://stackoverflow.com/questions/69275870
复制相似问题