我希望在我的项目中实现类似于UPROPERTY()
宏的东西,但是我找不到任何关于它是什么的参考资料。我的意思是,有一些关于这个宏如何工作的教程,但这些只是使用案例。
编译器是如何知道UPROPERTY()
引用其下面的变量的?
例如:
UPROPERTY(EditAnywhere)
int x = 0;
我知道虚幻引擎是开源的,但它的代码库非常庞大。
我希望在我的项目中实现类似于UPROPERTY()
宏的东西,但是我找不到任何关于它是什么的参考资料。我的意思是,有一些关于这个宏如何工作的教程,但这些只是使用案例。
编译器是如何知道UPROPERTY()
引用其下面的变量的?
例如:
UPROPERTY(EditAnywhere)
int x = 0;
我知道虚幻引擎是开源的,但它的代码库非常庞大。
UPROPERTY
不是一个真正的 C++ 宏。虽然它看起来像一个宏,编译器也能够接受它,但实际上它是由Unreal Header Tool (UHT) 用来创建您类的GENERATED_BODY
代码中要添加的代码。UHT是一个解析器,它只需获取您的所有代码并搜索所有那些 UCLASS
, UPROPERTY
, UFUNCTION
等声明,然后生成相应的代码,最后将其放入 "XXX.generated.h" 和 "XXX.generated.cpp" 文件中,这些文件会被包含在您的项目中。例如,如果您希望通过蓝图访问变量,则会创建一个 getter 逻辑,以允许蓝图逻辑调用。
因此,编译器实际上并不知道 UPROPERTY
是什么,因为预处理程序完全删除了它,因为它没有一个实际的主体。
如果您想深入了解UHT的工作原理,您可以查看其代码。您还可以修改它以满足您的需求,包括自定义代码生成。
关于 Unreal 中的宏的附注:Unreal 中的 Slate 框架实际上使用宏来生成大量样板代码,无需使用 Unreal Header Tool。也许研究一下它会给您一些洞见。但它们与 UHT 进行的代码生成的强大程度并不相同。