使用 std::ranges::views 替换
Using replace with std::ranges::views
我正在尝试使用 Microsoft Visual Studio 2019 学习 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
我尝试使用 view.begin(), view.end()
我尝试在调用 std::ranges::replace 之前使用 std::ranges::copy
。
是我做错了什么吗?
PS:在项目设置中,我不得不select Preview - Features from the Latest C++ Working Draft (/std:c++latest)
因为有了ISO C++20 Standard (/std:c++20)
和最新版本的Visual Studio 2019预览我可以' 使用没有编译错误的视图。
transform
创建一个不可修改的视图。具体来说,它会创建一个范围,其中包含根据需要制造的对象。它们没有永久、固定的存储空间,因此无法用其他东西“替换”它们。
您可以将范围复制到容器中,然后在容器上执行替换操作。
我正在尝试使用 Microsoft Visual Studio 2019 学习 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
我尝试使用 view.begin(), view.end()
我尝试在调用 std::ranges::replace 之前使用 std::ranges::copy
。
是我做错了什么吗?
PS:在项目设置中,我不得不select Preview - Features from the Latest C++ Working Draft (/std:c++latest)
因为有了ISO C++20 Standard (/std:c++20)
和最新版本的Visual Studio 2019预览我可以' 使用没有编译错误的视图。
transform
创建一个不可修改的视图。具体来说,它会创建一个范围,其中包含根据需要制造的对象。它们没有永久、固定的存储空间,因此无法用其他东西“替换”它们。
您可以将范围复制到容器中,然后在容器上执行替换操作。