我正在嘗試使用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。
}
我得到了以下錯誤:
我得到了以下錯誤。
錯誤 C2672 'operator __surrogate_func': 沒有找到匹配的多載函式
錯誤C7602 'std::range::_Replace_fn::operator ()': 相關約束條件不滿足
我試著使用view.begin(), view.end()我試著在呼叫std::ranges::copy之前使用std::ranges::replace.
是我做錯了什么嗎?
PS:在專案設定中,我不得不選擇Preview - Features from the Latest C Working Draft (/std:c latest),因為使用ISO C 20 Standard (/std:c 20)與最新版本的 Visual Studio 2019 preview,我無法使用視圖而不會出現編譯錯誤。
uj5u.com熱心網友回復:
transform創建一個不可修改的視圖。具體來說,它創建了一個包含物件的范圍,這些物件根據需要被制造。它們沒有永久的、固定的存盤,所以它們不能被 "替換 "成其他東西。
您可以將該范圍復制到一個容器中,然后在該容器上執行您的替換操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/333970.html
標籤:
