cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
88 stars 0 forks source link

Добавить для std::string_view конструктор от итераторов #398

Closed apolukhin closed 2 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +0, -5 Автор идеи: Антон

Добавить для std::string_view конструктор от итераторов, аналогичный конструктору в std::string

Например, можно будет упростить использование std::string_view и std::regex

    std::string_view x = "123.123.123.123";

    std::match_results<std::string_view::const_iterator> match;
    std::regex_search(x.begin(), x.end(), match, std::regex(R"(([0-9]{3})\.([0-9]{3})\.([0-9]{3})\.([0-9]{3}))"));

    // c++17
    std::string_view token1(&(*match[1].first), match[1].length());
    // or
    std::string_view token2(&(*match[2].first), std::distance(match[2].first, match[2].second));

    // motivation example
    //std::string_view token3(match[3].first, match[3].second);
apolukhin commented 3 years ago

Igor Baidiuk, 28 декабря 2018, 15:35 Мне кажется, вы упускаете, что string_view должен инициализироваться непрерывным сегментом строки. Для итераторов же это граничный случай. Ranges имеют вроде как концепт Sequential, но тогда логично превратить подобрый рейндж в блок символов, и уже его паковать в std::string_view

apolukhin commented 3 years ago

Над идеей уже работают https://wg21.link/p1989

apolukhin commented 2 years ago

Приняли в C++23