Я спросил How do I capture the results of a recursive function at compile-time?, но я думаю, что мой подход был неправильным.Как сохранить промежуточные результаты рекурсивной функции с использованием шаблонов C++ во время компиляции?
У меня есть программа, как так:
#include <iostream>
#include <list>
std::list<unsigned int> recursive_case(std::list<unsigned int>& result, unsigned int& i) {
result.push_front(1 + (i % 10));
i /= 10;
return i != 0 ? recursive_case(result, i) : result;
}
std::list<unsigned int> initial_case(unsigned int i) {
std::list<unsigned int> result;
result.push_back(i % 10);
i /= 10;
return i != 0 ? recursive_case(result, i) : result;
}
int main() {
auto list = initial_case(123);
bool first = true;
for (auto i: list) {
if (first) {
first = false;
} else {
std::cout << ", ";
}
std::cout << i;
}
std::cout << std::endl;
}
Выход является 2, 3, 3
.
Я хочу выполнить вышеуказанное вычисление и получить тот же результат, но в компиляции-времени (итерация цикла и печать на выходе будут во время выполнения, то есть все, начиная с цикла for). Шаблоны кажутся возможными (вот почему я пометил этот вопрос как таковой), но я открыт для всего, что выполняет работу во время компиляции.
Я не могу использовать std :: list внутри функции constexpr. Спасибо за попытку. –