【发布时间】:2012-09-29 17:22:24
【问题描述】:
Scala 的宏和 C++ 模板都提供了对编译时元编程的访问。您能否详细说明相同点和不同点?它们在表现力方面是否相同?
【问题讨论】:
-
不难看出要问什么。请在点击关闭之前阅读并思考。
标签: c++ templates scala macros
Scala 的宏和 C++ 模板都提供了对编译时元编程的访问。您能否详细说明相同点和不同点?它们在表现力方面是否相同?
【问题讨论】:
标签: c++ templates scala macros
它们都提供编译时元编程,并且都图灵完备,但这就是它们的共同点。我不是 C++ 专家,但据我所知,C++ 模板正在完善这一事实很少被利用,并且很难将它们用于实际编程。通常,模板仅用于提供参数多态性(也称为泛型),而 Scala 宏是用 Scala 编写的,可以在编译时使用该语言的全部功能。
【讨论】:
enable_if 这样的工具。 C++11 还引入了constexpr,这是一个完全独立的编译时计算工具。我想说,C++ 中模板的常见用途是用于编译时计算对类型进行操作。除此之外的任何事情都是罕见的/困难的/神秘的。
decltype 和constexpr,在编译时可用的工具也非常有限。我不知道Scala有什么限制,你能打印(至少到屏幕上)吗?
它们之间的一个重要区别是 Scala 宏是用 Scala 编写的,而 C++ 模板是它们自己的编程语言,这与 C++ 完全不同。 C++ 是一种命令式的面向对象的严格不纯语言,C++ 模板是一种声明性混合逻辑/功能的非严格纯语言,它从未打算用作成熟的编程语言,因此缺乏许多必要的特性大型编程。
【讨论】: