UE-c++ className.generated.h报错:generated header must be included last in a list of includes

一. 问题

为什么不把#include xx.generated.h放最后会导致error "the .generated.h file should always be the last #include in a header"

二. 求助

在这里插入图片描述

三. 分析

大佬简短凝练的回答道:因为好识别!
不是其他奇奇怪怪的原因
在这里插入图片描述

然后我们想一下,识别 这个词,谁识别,识别谁,为什么会好识别?识别后来做啥?结合其包含的反射机制,可以引出很深的话题,这里不做探讨。

四. 总结

为了反射机制运行的方便。

五. 新的认识

UE的反射机制是根据宏生成对应的代码。
既然是C++,那么生成的代码自然是.h.cpp的组合。假设我们为类A生成了A.generated.h和A.generated.cpp(UE命名习惯)。如果类A的宏标记生成的代码想跟A.generated.h里我们生成的代码来个里应外合的话,此时A.h一般都需要include"A.generated.h"。
另一方面,用户对背后的代码生成应该是保持最小惊讶的,用户写下了A.h,他在使用的时候自然也会想include “A.h”,所以这个时候我们的A.generated.h就得找个方式一起安插进来,最方便的方式莫过于直接让“A.h” include “A.generated.h”了。那既然每个需要分析的文件最后都会include这么一个*.generated.h,那自然就可以把它本身就当作一种标记了。
UE目前的方案是每个要分析的文件加上该include并且规定只能当作最后一个include,放最后也是因为他担心会有各种宏定义顺序产生的问题。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值