es una plantilla de C++ ¿La metaprogramación es una forma de programación funcional? En caso afirmativo, ¿hay algunas dificultades, como el stackoverflow para la recurrencia sin cola relevante para la metaprogramación de plantillas de C++?es una plantilla de C++ La metaprogramación de una forma de programación funcional
Para el ejemplo de la plantilla factorial en this question, supongo que es una programación funcional estándar. ¿O la similitud es solo superficial?
#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;
}
Las plantillas C++ son en realidad un lenguaje de programación funcional extremadamente puro (¡sin efectos secundarios!), Con la particularidad de que se evalúan completamente en tiempo de compilación, a diferencia de la mayoría de los lenguajes funcionales. Y la sintaxis no es muy buena. Por lo tanto, tiene sentido que el mismo tipo de técnicas y algoritmos que funcionan con uno también se correlacionen con el otro. De hecho, existen proyectos que "desugar" un subconjunto de plantillas de Haskell a C++. No sé mucho sobre las características de rendimiento/"semántica operacional". – glaebhoerl
Quizás debería consultar [boost :: phoenix] (http://www.boost.org/doc/libs/1_50_0/libs/spirit/phoenix/doc/html/index.html). –
Esto es definitivamente una pregunta real. Es solo uno que es un poco abstruso. – Marcin