RISC的PROC宏的C++替代

RISC的PROC宏的C++替代,c++,rust,macros,C++,Rust,Macros,Rust具有非常惊人的特性,可以在编译时使用纯Rust代码的proc_宏生成代码。是否有类似的C++让我执行真正的C++代码来生成代码而不是丑陋的定义。< p>没有什么东西可以在C++中实现,以达到等价的RoC PROC宏,目前。 传统上,在C++中,我看到了2种不同的方法来达到类似的效果: 代码生成:一个单独的可执行文件作为生成C++文件的构建的一部分运行。例如LLVM特性。 预处理:一个单独的可执行文件预处理C++文件并在生成过程之前对它们进行转换。例如QT特性。 我认为QT的MOC在精神上

Rust具有非常惊人的特性,可以在编译时使用纯Rust代码的proc_宏生成代码。是否有类似的C++让我执行真正的C++代码来生成代码而不是丑陋的定义。

< p>没有什么东西可以在C++中实现,以达到等价的RoC PROC宏,目前。 传统上,在C++中,我看到了2种不同的方法来达到类似的效果:

代码生成:一个单独的可执行文件作为生成C++文件的构建的一部分运行。例如LLVM特性。 预处理:一个单独的可执行文件预处理C++文件并在生成过程之前对它们进行转换。例如QT特性。 我认为QT的MOC在精神上更接近Rust proc宏,LLVM TableGen更接近Rust的build.rs

Herb Sutter一直在建议,这将涵盖proc宏的一个子集:派生宏


不使用PROC宏来转换函数代码,否则就在本地生成任意代码。

,目前C++中没有任何东西可以实现等价的RoC PROC宏。 传统上,在C++中,我看到了2种不同的方法来达到类似的效果:

代码生成:一个单独的可执行文件作为生成C++文件的构建的一部分运行。例如LLVM特性。 预处理:一个单独的可执行文件预处理C++文件并在生成过程之前对它们进行转换。例如QT特性。 我认为QT的MOC在精神上更接近Rust proc宏,LLVM TableGen更接近Rust的build.rs

Herb Sutter一直在建议,这将涵盖proc宏的一个子集:派生宏


它不包括使用proc宏转换函数代码,或以其他方式原位生成任意代码。

是。模板在编译时实例化。constexpr可以在编译时进行计算。此外,编译器尝试在编译时评估可能的情况,例如使用常量传播。我对铁锈了解得太少,并告诉RISE的PROC宏是多么的相似。我能想到的最接近C++的代码,它是C++语言代码的一部分,它将是一种方法,而不是真正的RISE程序宏。模板在编译时实例化。constexpr可以在编译时进行计算。此外,编译器尝试在编译时评估可能的情况,例如使用常量传播。我对铁锈了解得太少,无法告诉RISE的PROC宏。我能想到的最接近C++的代码是C++语言的一部分,它是一种方法,并不能与RIST的程序宏相媲美。