Нетипові параметри шаблонів
Під час визначення шаблону можна не лише вказувати типи, а й передавати значення цим типам. Це дозволяє створювати шаблони, які поводяться по-різному залежно від наданих значень, але до цього ми повернемося трохи пізніше.
main.cpp
123456789101112#include <iostream> // Non-type parameter means we won't use typename // Instead you can use an actual type for it template<int N> void PrintValue() { std::cout << N << std::endl; } int main() { // Call the template function with a literal integer PrintValue<5>(); // 5 }
Головна перевага цього підходу полягає в тому, що всі обчислення виконуються під час компіляції, що дає змогу використовувати його в метапрограмуванні.
main.cpp
1234567891011#include <iostream> // Template function to calculate the square of a non-type parameter I template<int I> int Square() { return I * I; } // Return the square of I int main() { // The result of Square<5>() is computed at compile time int b = Square<5>(); // b will be initialized to 25 }
Під час запуску скомпільованої програми значення b вже дорівнюватиме 25. Обчислення виконується на етапі компіляції, що призводить до нульової кількості операцій під час виконання.
Дякуємо за ваш відгук!
single
Нетипові параметри шаблонів
Свайпніть щоб показати меню
Під час визначення шаблону можна не лише вказувати типи, а й передавати значення цим типам. Це дозволяє створювати шаблони, які поводяться по-різному залежно від наданих значень, але до цього ми повернемося трохи пізніше.
main.cpp
123456789101112#include <iostream> // Non-type parameter means we won't use typename // Instead you can use an actual type for it template<int N> void PrintValue() { std::cout << N << std::endl; } int main() { // Call the template function with a literal integer PrintValue<5>(); // 5 }
Головна перевага цього підходу полягає в тому, що всі обчислення виконуються під час компіляції, що дає змогу використовувати його в метапрограмуванні.
main.cpp
1234567891011#include <iostream> // Template function to calculate the square of a non-type parameter I template<int I> int Square() { return I * I; } // Return the square of I int main() { // The result of Square<5>() is computed at compile time int b = Square<5>(); // b will be initialized to 25 }
Під час запуску скомпільованої програми значення b вже дорівнюватиме 25. Обчислення виконується на етапі компіляції, що призводить до нульової кількості операцій під час виконання.
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат