Понимание полезности SFINAE
Ошибка замены не является ошибкой (SFINAE) — важная концепция метапрограммирования шаблонов. Хотя его теоретические последствия значительны, понимание его практического применения может улучшить ваши способности к программированию. . Вместо того, чтобы полагаться на явные операторы if, SFINAE позволяет вам определять специализации шаблона, которые оценивают различные типы в зависимости от истинности условия.
Рассмотрите следующий код:
template void div(char(*)[I % 2 == 0] = 0) { /* это берется, когда I четно */ } templatetemplate void div(char(*)[I % 2 == 0] = 0) { /* this is taken when I is even */ }
template void div(char(*)[I % 2 == 1] = 0) { /* this is taken when I is odd */ }
SFINAE также предоставляет удобный способ проверки размера списков инициализаторов. Вот пример:
template
template
struct Vector {
template
Vector(MyInitList const& i, char(*)[M SFINAE — это универсальный метод, который дает программистам возможность выполнять вычисления на уровне типов и принимать условные решения по коду. Его приложения, от проверки логических условий до проверки правильности списков инициализаторов, демонстрируют его полезность в расширенном программировании на языке C.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3