当涉及到模板元程序时,人们总是说使用归纳法解决问题。例如看到这个答案:https://stackoverflow.com/a/11811486/4882052
我知道归纳证明等,但这个理论如何用于解决元程序?。我喜欢有例子的例子:)
最佳答案
“归纳法”只是从不同的角度看递归。在每一种情况下,您都需要一个或多个基本案例,在这些案例中,可以在不递归的情况下解决问题,并且您需要一个递归案例,在递归案例中,可以通过使用更接近基本案例的相关问题的解决方案来解决问题。
在运行时递归编程中,可以通过运行时条件检测基本情况。在递归元编程中,即使是编译时条件也不足以处理基本情况。您需要利用重载或专门化来涵盖基本情况的单独定义。
我自己第一次用的时候比较乱,不能全文引用,但大概的思路可能有指导意义。编译器在展开短循环之前进行了各种优化,并在展开短循环之后进行了各种其他优化。但我真的需要在之后完成那些“之前”的优化之一。因此,我需要强制编译器在编译早期解除一些短循环,大致如下:
template<unsigned N>
struct unwind {
void operator()(X*p) { unwind<N-1>()(p); work(p[N]); } };
template<>
struct unwind<0> {
void operator()(X*p) { work(p[0]); } };
当您使用编译时递归而不是运行时循环时,编译器将在进行任何优化之前展开整个循环,因此在我的工作<中,在循环展开之前完成的类型优化
在循环展开完成之前,代码是不可见的。
关于c++ - C++模板元编程的归纳法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34359568/