Rust 的 proc 宏的 C++ 替代品

C++ alternative of rust's proc macros

Rust 有非常惊人的功能,可以在编译时使用 proc_macros 生成代码,这些都是纯 Rust 代码。 C++ 中是否有任何类似的东西可以让我执行真正的 C++ 代码来生成代码而不是丑陋的定义。

目前,C++ 中没有内置任何东西来实现与 Rust proc-macros 等效的功能。

传统上,在 C++ 中,我见过 2 种不同的方法来实现类似的效果:

  • 代码生成:一个单独的可执行文件作为构建的一部分运行以生成 C++ 文件。例如 LLVM 特性 TableGen.
  • 预处理:一个单独的可执行文件预处理 C++ 文件并在构建过程之前转换它们。例如 QT 特性 MOC.

我认为 QT 的 MOC 在精神上更接近 Rust proc-macros,而 LLVM TableGen 更接近 Rust 的 build.rs


Herb Sutter 一直在提议 meta-classes,它将涵盖 proc-macros 的一个子集:派生宏。

不包括使用proc-macros转换函数代码,否则生成任意代码in-situ。