Шаблон метапрограммирования - до сих пор не понимаю :( - PullRequest
30 голосов
/ 03 августа 2009

У меня проблема ... Я не понимаю шаблонное метапрограммирование.

Проблема в следующем: я много читаю. Но это не имеет особого смысла для меня: /

Факт № 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 ++ не могут читать функции.

А параметры отладки плохие (или, по крайней мере, я не знаю, как отлаживать).

Где смысл шаблонного метапрограммирования?

Ответы [ 11 ]

2 голосов
/ 04 августа 2009

Предлагаю вам прочитать Modern C ++ Design от Андрея Александреску - это, вероятно, одна из лучших книг о реальном использовании метапрограммирования шаблонов в C ++; и описывает много проблем, которые шаблоны C ++ являются отличным решением.

...