Scala宏与C++;模板 斯卡拉的宏和C++模板都提供了编译时元编程的访问。你能详细说明一下相同点和不同点吗?它们在表达能力方面是否相等?

Scala宏与C++;模板 斯卡拉的宏和C++模板都提供了编译时元编程的访问。你能详细说明一下相同点和不同点吗?它们在表达能力方面是否相等?,c++,templates,scala,macros,C++,Templates,Scala,Macros,它们都提供编译时元编程,并且都是图灵完全的,但这就是它们的共同点。我不是C++专家,但据我所知,C++模板是图灵完成的事实很少被开发,并且它们用于实际编程是困难的。通常,模板只是用来提供参数多态性(又称泛型),而Scala宏是用Scala编写的,可以在编译时使用该语言的全部功能> P.Scala宏是Scala中的一个重要区别,而C++模板是它们自己的编程语言,完全不同于C++。C++是一种面向对象的严格不纯净语言,C++模板是一种声明性的混合逻辑/功能非严格纯语言,它从来没有打算用作一种成熟的编

它们都提供编译时元编程,并且都是图灵完全的,但这就是它们的共同点。我不是C++专家,但据我所知,C++模板是图灵完成的事实很少被开发,并且它们用于实际编程是困难的。通常,模板只是用来提供参数多态性(又称泛型),而Scala宏是用Scala编写的,可以在编译时使用该语言的全部功能

> P.Scala宏是Scala中的一个重要区别,而C++模板是它们自己的编程语言,完全不同于C++。C++是一种面向对象的严格不纯净语言,C++模板是一种声明性的混合逻辑/功能非严格纯语言,它从来没有打算用作一种成熟的编程语言,因此,在大型编程中,缺少许多必要的特征。

确实,C++模板是用于实际编程的硬的-----如计算阶乘一样明显的NUMPTY示例很简单,但不是很有用。Boost和C++11使一些事情变得更简单,例如一堆更内置的类型特征,以及像
enable\u if
这样的工具。C++11还引入了
constexpr
,这是一个完全独立的编译时计算工具。我认为C++中模板的通用是用于在类型上运行的编译时计算。除此之外的任何东西都是罕见的/困难的/神秘的。它们是图灵完全的这一事实很少被利用,但模板本身经常被利用。另一方面,即使出现了
decltype
constexpr
,在编译时可用的工具也相当有限。我不知道Scala有什么限制,你能打印(至少在屏幕上)吗?@MatthieuM.:Scala宏是用Scala写的。您可以在编译时执行运行时可以执行的所有操作。没有限制。(嗯,编译器有一些超时和内存上限,旨在阻止失控的宏,但仅此而已。)Scala中没有限制。甚至还有宏可以在编译时访问数据库。@SteveJessop:注释不是用来问单独的问题的。不,要说出被问的问题一点也不难。在单击“关闭”之前,请阅读并思考。我同意大部分答案,除了面向对象的花边新闻。C++是多个范例,它从OO中得到了一点,但是如果Alan Kay是面向对象的模型,那么它将是合适的,而另一方面它提供的东西远远超过了传统上提供的OO。