Последнее обновление:2026-10-12
Выведение auto в шаблонах C++17¶
В C++ auto подходит для всего¶
В C++17 появилось множество возможностей, направленных на повышение выразительности кода и сокращение избыточности шаблонного кода. Одним из заметных улучшений стала возможность объявлять нетиповые шаблонные параметры с помощью ключевого слова auto. В некоторых сценариях эта возможность особенно удобна, так как устраняет необходимость в явном объявлении типа. Далее я покажу, как я использую эту возможность в своей работе, а именно в базе данных!
Учимся на практике: полный исходный код этого раздела будет выложен в сообществе (知识星球), заинтересованные — отсканируйте QR-код в конце страницы.
Нетиповые шаблонные параметры с auto в C++17¶
Сортировка в сценарии базы данных¶
Рассмотрим связанный с базой данных класс Foo, который вы хотите сортировать в определённом порядке, заданном перечислением:
У вас есть экземпляры Foo с разными порядками сортировки:
Прежний способ реализации¶
До C++17 мы могли бы написать так:
Однако это может привести к ошибке, поскольку компилятор не сможет вывести шаблонный параметр 'U'.
Упрощённый способ сейчас¶
После C++17 для нетиповых шаблонных параметров мы можем вместо этого использовать ключевое слово auto:
Этот способ проще: он позволяет использовать нетиповые шаблонные параметры без явного указания типа.
Упрощение integral_constant¶
Раньше integral_constant мы могли реализовать так:
А теперь достаточно:
Такое упрощение делает код более ясным и читабельным.
Вывод¶
Возможность использовать ключевое слово auto, появившуюся в C++17, для объявления нетиповых шаблонных параметров значительно упростила шаблонный код. Устраняя громоздкие объявления типов, мы можем более наглядно выражать намерение кода, повышая его читабельность и сопровождаемость. При работе со сценариями вроде сортировки эта возможность особенно полезна, позволяя сосредоточиться на сути задачи, а не на деталях шаблонных параметров.
Похожие темы¶
- Атрибут [[nodiscard]] в C++17 | C++那些事
- std::string_view в C++17 | C++那些事
- PMR-ресурсы памяти в C++17 | C++那些事
- Семнадцать расширенных возможностей C++17 | C++那些事
- Выведение аргументов шаблона класса CTAD в C++17 | C++那些事
- C++17 optional_ref | C++那些事
- std::variant в C++17 | C++那些事
- Структурированные привязки в C++17 | C++那些事
- Шаблоны переменных в C++17 | C++那些事