Std::string_view и std::string в интерфейсе библиотеки утилит

Std::string_view и std::string в интерфейсе библиотеки утилит
Std::string_view и std::string в интерфейсе библиотеки утилит - aditya1702 @ Unsplash

В C++ и его стандартных библиотеках вы найдете множество "строкоподобных" типов, таких как std::string, std::string_view, std::wstring, char *, std::string_view и так далее. Эта старая запись в блоге от 2008 года уже упоминала 30 типов (в контексте Windows legacy, но без std::vector<std::string_view>, который является C++17). Я уверен, что с тех пор это число увеличилось в несколько раз.

Как это поможет нам решить вашу проблему? Ну, в ситуации с огромным количеством доступных типов строк, я думаю, что при проектировании функций общего назначения лучше всего сосредоточиться только на одном типе, до тех пор пока

  • это имеет смысл
  • и это не приводит к огромному влиянию на производительность.

Поэтому я бы рекомендовал начать с _sv в качестве возвращаемого типа.

Это дает вызывающей стороне свободу в явном преобразовании к другому строкоподобному типу, или нет, или позволяет добавить дополнительную вспомогательную функцию (функции). Для них дополнительное дополнение, дополнительный суффикс типа _strview или std::string должен быть абсолютно приемлемым для имени дополнительных функций.

Конечно, когда выяснится, что в вашей системе конкретный вариант "split-stringview-with-conversion-to-string" нужен тысячу раз, а "split-stringview-without-conversion" нет нигде во всей кодовой базе, вы можете принять другое решение.

Прикрепляю к посту несколько видео по теме:

Прикрепленное видео 1 - Лекция 4. Нововведения стандарта С++17

Прикрепленное видео 2 - Антон Полухин. Как за час сделать недельную работу

Прикрепленное видео 3 - Unicode string in C++: Making cross-platform string by Maksym Bozhko (Rus)


LetsCodeIt, 4 января 2023 г., 02:51