虚幻引擎如何实现UPROPERTY宏



我想在我的项目中实现类似UPROPERTY()宏的东西,但我找不到任何关于它实际内容的参考。我的意思是,有关于这个宏如何工作的教程,但这些只是用例。

编译器如何知道UPROPERTY()引用了它下面的变量?

示例:

UPROPERTY(EditAnywhere)
int x = 0;

我知道虚幻是开源的,但它的代码库是巨大的。

UPROPERTY不是一个真正的C++宏。它看起来像一个,所以编译器接受它,但它实际上被Unreal Header Tool(UHT(用来创建代码,然后添加到类的GENERATED_BODY代码中。UHT是一个解析器,它只获取所有代码并搜索所有UCLASSUPROPERTYUFUNCTION等声明,然后为其生成适当的代码,然后将其放入";XXX、 生成.h";以及";XXX、 generated.cpp";您包含的文件。例如,如果您希望您的变量通过蓝图可读,则会创建一个getter逻辑以允许蓝图逻辑调用它

因此,编译器实际上并不知道UPROPERTY是什么,因为预处理器完全删除它是因为它没有实际的主体。

如果你想深入了解UHT是如何工作的,你应该研究一下它的代码。在那里,您还可以修改它以满足您的需求,包括自定义代码生成。


关于Unreal中的宏的一个附带说明:Unreal的Slate框架实际上使用宏在没有Unreal标头工具的情况下生成许多样板代码。也许调查一下会给你一些见解。但它们与UHT生成代码的能力并不相同。

最新更新