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