Я перепробовал все источники, доступные в сети, и книги, которые не в состоянии понять концепции и синтаксис шаблона.
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
}
что такое value
, которые ассоциируются с Factorial<4>::value
почему нам нужно enum
здесь.
В чем разница между struct Factorial<0>
и struct Factorial
, почему, если я объявляю как struct Factorial<4>
, почему это дает ошибку?