为什么Unreal头文件默认有两个public块?二者应如何划分内容?
Unreal引擎头文件双public块拆分规则说明
核心拆分逻辑
Unreal自动生成的头文件里的两个public块位置不同,对应的用途是UHT(虚幻头工具)的编译逻辑决定的,有明确的社区通用约定:
- 位于
GENERATED_BODY()宏上方的public块:仅允许存放构造函数声明、供UHT生成代码调用的友元声明、需要在宏之前定义的公共类型别名。这是硬性要求,带参数的构造函数如果放在宏下方会直接触发编译报错。 - 位于
GENERATED_BODY()宏下方的public块:存放所有其他对外公开的成员,包括普通C成员函数/变量、UFUNCTION、UPROPERTY等所有你需要暴露给外部C代码或者蓝图的内容。
操作建议
不建议合并两个public块,虽然大部分场景下合并后不会触发编译问题,但既不符合UE社区的通用编码习惯,也会在后续需要添加特殊声明(比如带参数的构造函数)时容易引发编译错误,同时会增加其他熟悉UE的开发者阅读你代码的理解成本。
最佳实践参考
你可以直接参考UE官方引擎源码的头文件写法,所有引擎内置类都严格遵循上述拆分规则,这是目前最通用的实践标准,多看引擎源码的头文件结构即可掌握。
内容的提问来源于stack exchange,提问作者Paul Berry
相关产品推荐
相关产品推荐

