gpt4 book ai didi

c++ - 我可以添加自定义#pragma 规则吗?

转载 作者:行者123 更新时间:2023-11-28 05:52:19 36 4
gpt4 key购买 nike

在 ODB(C++ 持久性库)上,#pragma db 用于反射等,但它不是标准指令或特定于编译器的指令。

#pragma db object
class person
{
...
private:
friend class odb::access;
person () {}

#pragma db id
string email_;

string name_;
unsigned short age_;
};

我可以像 ODB 一样在编译器上添加自定义#pragma 规则吗?

最佳答案

因为这不是标准的 #pragma,它实际上被 ODB 的预处理器使用,ODB 为“真正的编译器”吐出处理过的 C++ 代码。

您可以通过编写解析源代码并修改它的程序来做类似的事情。这不是您可以在五分钟内搞定的东西,但是使用一些库(例如 libclang),您可以切实可行地读取、处理和输出修改后的源代码,并将其发送给正确的编译器。

要为编译器本身生成真正的#pragma,您必须修改编译器的源代码。

编辑:生成您自己的支持自定义编译指示的完整编译器的一种相对轻量级的方法是从 clang 开始,然后构建您自己的编译器驱动程序,或修改 cc1_main.cpp。

然后使用 Preprocessor::addPragmaHandler() 引入您自己的编译指示。这将是修改编译器,但实际上不必更改实际的编译器源代码——维护对实际编译器的更改比将“插件”应用于编译器源代码的公共(public)接口(interface)要困难得多。即使这些确实发生了变化,它也不会像编译器源代码本身中的 pragma 列表那样“繁忙”。

关于c++ - 我可以添加自定义#pragma 规则吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34974345/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com