Всем привет! Я вот тут решил немного поэкспериментировать с шаблонным метапрограммированием в С++. Начал с простого, а именно со старых добрых симпатичных узоров. В результате получилась следующая реализация.
Она даже быстро компилируется при N·M ≤ 30 и работает, например, при N = 5 и M = 100 (при больших никак, ибо максимальная глубина инстанцирования в GNU — 900). Она правильно считает, но у меня возникло несколько вопросов. Дело в том, что инстанцирование шаблона metaFor происходит для всех значений m
, mask
и cur_mask
. Так вот этот самый cur_mask
по сути просто счетчик цикла, не входящий в состояние динамики. Можно ли как-то убрать его из параметров шаблона, сохранив возможность итерирования с помощью него? Тогда можно было бы считать динамику при значительно больших N и M. Второй вопрос заключается в том, а можно ли как-то ускорить данную реализацию?