【发布时间】:2012-07-12 19:19:57
【问题描述】:
c++ 模板元编程是函数式编程的一种形式吗?如果是,是否存在一些陷阱,例如与 c++ 模板元编程相关的非尾递归的 stackoverflow?
this question 中的阶乘模板示例,我猜它是标准函数式编程。还是相似只是表面现象?
#include <iostream>
using namespace std;
template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };
template<>
struct factorial< 0 > { enum { ret = 1 }; };
int main() {
cout << "7! = " << factorial< 7 >::ret << endl; // 5040
return 0;
}
【问题讨论】:
-
C++ 模板实际上是一种极其纯粹的函数式编程语言(没有副作用!),与大多数函数式语言不同,它的特点是完全在编译时进行评估。而且语法不是很好。因此,与一个工作的相同类型的技术和算法也映射到另一个是有道理的。事实上,存在将 Haskell 的一个子集“脱糖”为 C++ 模板的项目。我不太了解性能特征/“操作语义”。
-
也许你应该看看boost::phoenix。
-
这绝对是一个真实的问题。这只是一个有点深奥的。
-
@Marcin :“不是一个真正的问题”的描述为“这个问题模棱两可、含糊不清、不完整、过于宽泛或修辞,无法在其目前的形式。” -- 我想说的不止适用。
-
@ildjarn 这个问题有多宽泛?非常具体。
标签: c++ templates functional-programming