【发布时间】:2015-10-30 04:19:06
【问题描述】:
我问了How do I capture the results of a recursive function at compile-time?,但我认为我的方法是错误的。
我有一个这样的程序:
#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 循环开始的所有内容)。模板似乎是一种可能性(这就是我将这个问题标记为这样的原因),但我愿意接受任何可以在编译时完成工作的东西。
【问题讨论】:
标签: c++ templates recursion template-meta-programming constexpr