Я не понимаю, как этот фрагмент кода (из Википедии) работает:
template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0>
{
enum { value = 1 };
};
// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
int x = Factorial<4>::value; // == 24
int y = Factorial<0>::value; // == 1
}
- Что это за странный шаблон, который
принимает
<int N>
? - Что это за второй
странный шаблон
<>
? - Что такое
enum
для? - В чем преимущество использования этого, а не нормального факториальный расчет времени выполнения?
- Как часто вы это используете? Я уже некоторое время использую С++, но никогда раньше этого не использовал. Насколько большой частью С++ я отсутствовал?
Спасибо!