Я довольно новичок в Boost fusion, и, возможно, мой вопрос не имеет никакого смысла. Fusion представлен как «слияние между временем выполнения и алгоритмами времени компиляции». Я думаю, что теряюсь между тем, что делается во время компиляции, и тем, что делается во время работы в режиме слияния.время компиляции и время запуска с boost :: fusion
Позволяет взять шаблон for_each
, ведь они два! function и metafunction. Metafunction выглядит как шаблон класса признаков для функции for_each
, не так ли?.
взяв пример for_each
функции:
struct increment
{
template<typename T>
void operator()(T& t) const
{
++t;
}
};
vector<int,int> vec(1,2);
for_each(vec, increment());
Я понимаю, что петля for_each
будет разворачивались во время компиляции для получения кода как
++at_c<0>(vec);
++at_c<1>(vec);
(очевидно, at_c<x>
шаблоны также будет генерировать код для доступа к членам вектора слияния)
Для меня как функции for_each, так и metafun ction «компилировать временные программы», неправильно снова?
Может кто-нибудь объяснить мне (на простом примере), какая часть ускорения слияния - это просто метапрограмма времени компиляции и что такое классический код времени компиляции?
Хорошо, спасибо Раймонду, я думаю, что мой вопрос в основном отражает мое невежество слияния. Я сокращу его, чтобы сделать его полезным для других новичков fusion. – Laurent