У меня проблема. Я не понимаю Template Metaprogramming.
Проблема в том, что я много читаю. Но мне это не имеет смысла:/
Факт nr.1: шаблон метапрограммирования быстрее
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
}
так что эта метапрограмма быстрее... beacause of Constant Literal.
НО: Где в реальном мире у нас есть постоянные литералы?
Большинство программ, которые я использую, реагируют на ввод пользователя.
ФАКТ №. 2: шаблон метапрограммирования может улучшить лучшую ремонтопригодность.
Да. Факториальный пример может быть полезным... но когда дело доходит до сложных функций, я и большинство других программистов на C++ не могут читать функции. И параметры отладки плохие (или, по крайней мере, я не знаю, как отлаживать)
Где шаблон метапрограммирования имеет смысл?