NTTP (Non-Type Template Parameters) в C++ - это шаблонные параметры, которые не являются типами, а могут быть значениями константных выражений, таких как целые числа, указатели, ссылки и т.д. Они позволяют задавать параметры шаблона значениями, что может быть полезно для создания более гибкого и эффективного кода.
#include
// Шаблонная структура, которая принимает целое число в качестве параметра шаблона
template
struct Factorial {
static const int value = N * Factorial::value;
};
// Специализация шаблона для случая N = 0
template<>
struct Factorial<0> {
static const int value = 1;
};
int main() {
std::cout << "Factorial of 5: " << Factorial<5>::value << std::endl;
return 0;
}
В этом коде N - это не тип, а значение (целое число), передаваемое в шаблон. Мы используем его для вычисления факториала числа на этапе компиляции.
Основные моменты:
Шаблон Factorial принимает целое число в качестве параметра.
Специализация шаблона Factorial для случая N = 0 определяет базовый случай рекурсии.
В main мы выводим факториал числа 5, который вычисляется на этапе компиляции.
Это иллюстрирует использование NTTP для вычислений на этапе компиляции, что может приводить к более эффективному коду, поскольку результат известен уже на этапе компиляции и не требует выполнения на этапе выполнения.