Использование boost::MPL в вычислении таблицы умножения
1,00
р.
р.
Задача простая: для заданного n вычислить элементы табл. умножения: i j (i = 1 ... n, j = 1 ... n). Полученную таблицу вывести на печать. Но осложняется тем, что нужно все вычисления, а также вывод таблицы сделать с помощью библиотеки boost::MPL, в которой я плохо разбираюсь ). Написал такой код: const int n = 5 typedef range_c numbers typedef vector> data // int_<3> для примера template struct wrap{} typedef mpl::fold< numbers, data, mpl::push_back<_1, mpl::plus<int_<3>, back<_1>>> >::type fold_line struct print_value { template void operator()(wrap ) const { std::cout << std::setw(4) << col::value } } <br>template void print_line() { mpl::for_each< row, wrap <_> >(print_value()) std::cout << std::endl } <br>struct line { void operator()() const { print_line() } } int main() { std::cout << "Table " << n << "x" << n << std::endl mpl::for_each<numbers>(line()) system("pause") return 0 } Но вылетает ошибка: error C2064: результатом вычисления фрагмента не является функция, принимающая 1 аргументов boost\mpl\for_each.hpp Кроме того, если я правильно понял, как это работает, тут должна вывестись 5 раз строка "3 6 9 12 15", то есть только одна строка таблицы. А как сделать так, чтобы можно было передавать mpl::fold разные data, то есть не vector>, а vector>, где n - текущий номер строки таблицы, и в строке кода mpl::push_back<_1, mpl::plus<int_<3>, back<_1>>> Вместо int_<3> тоже использовать что-то вроде int_?
Ответ У вас функции печати строк, элементов и т.д. не принимают никаких параметров. Как они узнаю, что им печатать? Полиморфизм по типу параметра функции реализуется через шаблон struct line { template< typename T > void operator()(T &v) const { print_line(v) } } В такую функцию можно передавать любой параметр int_