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