我的github
posts - 3243,  comments - 42,  views - 158万

会发现它是一个宏定义

// Include a redundant semicolon at the end of the generated code block, so that intellisense parsers can start parsing
// a new declaration if the line number/generated code is out of date.
#define GENERATED_BODY_LEGACY(...) BODY_MACRO_COMBINE(CURRENT_FILE_ID,_,__LINE__,_GENERATED_BODY_LEGACY);
#define GENERATED_BODY(...) BODY_MACRO_COMBINE(CURRENT_FILE_ID,_,__LINE__,_GENERATED_BODY);

那么问题来了,BODY_MACRO_COMBINE又在哪里呢?像是在套娃似的。。

它的目的是为了给当前的类生成一些东西。。

参考1:https://zhuanlan.zhihu.com/p/483857843

参考2:https://www.freesion.com/article/5001284410/

 CURRENT_FILE_ID的定义在generated.h中找到。

__LINE__为generated_body()函数所在的行数。

把两者拼接在一起得到一个新的宏定义:mygame1_Source_mygame1_mygame1GameModeBase_h_15_GENERATED_BODY

该宏定义里面又包含了四个宏定义的函数。同样是在generated.h里可以找到。

参考:https://zhuanlan.zhihu.com/p/626783433

>>宏 GENERATED_UCLASS_BODY() 与 GENERATED_BODY() 简析:

https://www.cnblogs.com/tomato-haha/p/17434952.html

跟以往不同,当你创建一个新的UE4类时,您将注意到的第一件事是.cpp文件中缺少任何构造函数。此外,那些目光敏锐的人会发现.h文件中的宏也有所不同。GENERATED_BODY()宏允许在不定义构造函数的情况下构建类。如果需要构造函数,可以将该宏更改为更熟悉的GENERATED_UCLASS_BODY()。如果这样做,则必须为类提供构造函数,否则将无法在Visual Studio中生成项目。因此,您的代码将如下所示:

复制代码
// MyActor.h
UCLASS()
class TESTCONSTRUCTOR_API AMyActor : public AActor
{
    GENERATED_UCLASS_BODY()   
};

/*********************************/

// MyActor.cpp

#include "MyActor.h"

AMyActor::AMyActor(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
    // Class constructor/initialization code
}
复制代码

 

posted on   XiaoNiuFeiTian  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-09-25 Vue:v-model和v-bind的区别
2021-09-25 Mongodb怎么查看和导出表结构(集合结构)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示