Как протащить верблюда сквозь игольное ушко, или обновление компилятора С++ на игровом проекте старше 10 лет

Как «Аллоды Онлайн» с Visual C++ 2010 на 2019 переезжали.

Как протащить верблюда сквозь игольное ушко, или обновление компилятора С++ на игровом проекте старше 10 лет
199199

Правильно догадываетесь. Я немного предвзято отношусь к boost-у, имхо, он не совсем про производительность, но, вполне возможно, я просто не умею его готовить, мы используем eastl::string_view.
Что касается мотивации string_view, то вот банальнейший пример.
Допустим, есть набор функций, принимающий const string &, а в коде много вызовов этих функций с const char *. В таких вызовах мы получаем лишние string constructor/destructor и new/delete. Есть несколько способов решить данную проблему. Например, запилить отдельные реализации для const char *. Вариант не особо интересный и багоопасный. А есть вариант преобразовать этот набор функций в шаблоны, и передавать string_view вместо const char *, т.к. API string и string_view практически идентичен, сами функции исправлять и не нужно, если только c_str() изменить на data(), если есть такое вызовы. Да, придётся пройтись по всему код и заменить вызовы. Процесс не особо увлекательный, но и в этом есть плюс, все неоптимальные вызовы можно будет поправить.

Ответить