Scala的宏和C++的模板都提供了对编译时元编程的访问。您能详细说明一下它们的相似之处和区别吗?在表达能力方面,它们是否相等?
它们之间的一个重要区别在于,Scala 宏是用 Scala 编写的,而 C++ 模板是它们自己的编程语言,与 C++ 完全不同。C++ 是一种命令式面向对象的严格不纯语言,而 C++ 模板是一种声明式混合逻辑/函数式非严格纯语言,它从未被设计成一个完整的编程语言,因此缺少许多大规模编程所必需的特性。
enable_if
这样的工具。C++11还引入了constexpr
,它是一个完全独立的用于编译时计算的工具。我认为C++中模板的常见用途是对类型进行编译时计算。除此之外的任何用途都是罕见/困难/深奥的。 - Steve Jessopdecltype
和constexpr
的出现,可在编译时使用的工具也相当有限。我不知道Scala中的限制是什么,你能打印(至少在屏幕上)吗? - Matthieu M.