C++基础类型规范


由于PC、XBOX、PS4等各平台的C++基础类型大小可能不同(实际上绝大部分都是整型类型的大小不同),因此UE4提供了如下可移植基础类型的别名来统一规范类型大小:

  • bool 代表布尔值(不会假定布尔尺寸)。
  • TCHAR 代表字符(不会假定TCHAR尺寸)。
  • uint8 代表无符号字节(1字节)。
  • int8 代表带符号字节(1字节)。
  • uint16 代表无符号“短”字符(2字节)。
  • int16 代表带符号“短”字符(2字节)。
  • uint32 代表无符号整数(4字节)。
  • int32 代表带符号整数(4字节)。
  • uint64 代表无符号“四字”(8字节)。
  • int64 代表带符号“四字”(8字节)。
  • float 代表单精确浮点(4字节)。
  • double 代表双精确浮点(8字节)。
  • PTRINT 代表可能含有指针的整数(不会假定PTRINT尺寸)。
  1. 当需要明确基础类型尺寸大小(例如需要序列化等功能),应使用可移植的类型。
  2. 如果代码中的整型类型大小不是很重要,可直接使用C++的 int 和无符号 int 类型(不同的平台上的大小可能不同),典型的例子是用于循环的整型变量i。

个人认为,如果想更简单明了地选择类型的话,那么建议在类/结构体的声明部分(变量/函数返回值/函数参数等)使用可移植类型,而函数实现里出现的某些无关紧要的临时变量(例如循环体的整型变量i)则可以直接使用C++基础类型。

UCLASS()
class MYPROJECT_API USomething: public UObject{
UPROPERTY()
int32 ID; UFUNCTION()
uint32 GetValue();
}; uint32 USomething::GetValue(){
uint32 value = 0;
for(int i = 0; i < vec.size(); ++i){
value += vec[i];
}
return value;
}

命名规范


  1. 命名(如类型或变量)中的每个单词需大写首字母,单词间通常无下划线。

    例如:Health 和 UPrimitiveComponent,而非 lastMouseCoordinates 或 delta_coordinates。

  2. bool变量必须以b为前缀(例如 bPendingDestruction 或 bHasFadedIn)。

  3. 类型名前缀需使用额外的大写字母,用于区分其和变量命名。

    例如:FSkin 为类型名,而 Skin 则是 FSkin 的实例。

    类型命名前缀规范如下:

    蓝图类别 前缀
    继承自 UObject U
    继承自 AActor A
    继承自 SWidget S
    抽象界面类的前缀 I
    枚举类的前缀 E
    模板类 T

    其他多数类均以F为前缀,而部分子系统则以其他字母为前缀。

    模板实例化的Typedef不再是模板,并应加上相应前缀,例如:typedef TArray<FMytype> FArrayOfMyTypes;

  4. 蓝图命名:"BP"+类别缩写+"_"+名字

    例如: BPA_Player

    蓝图类别 前缀
    蓝图Actor BPA_
    蓝图结构 BPS_
    蓝图枚举 BPE_
    蓝图接口 BPI_
    蓝图函数库 BFL_
    蓝图宏库 BML_

头文件规范


  • 确保自己include的头文件不要放在 "XXX.generated.h" 文件下面,因为Unreal Header Tool编译工具默认这个文件就是头文件列表的最后一行了。

字符串规范


  • 在字符串字面量周围使用 TEXT() 宏:若未使用,在文字中构建 FStrings 的代码将导致不理想的字符转换过程。
"Hello World!";			//Not so well

TEXT("Hello World!");	//OK

字符集规范


  • 应将C++代码文件都保存为utf8格式:否则可能会出现在UE4蓝图中调用C++代码(函数、类等)时,出现注释乱码的情况。

错误处理规范


  • 不要使用C++异常机制(try,catch),UE4代码默认是不支持的,推荐使用Assertions。
//example
int i=1;
verify(i==0);

具体UE4提供的断言可查看:虚幻引擎4 官方文档 | 断言相关规范

参考


系列其他文章:Aery的UE4 C++开发之旅系列文章

Aery的UE4 C++游戏开发之旅(2)编码规范的更多相关文章

  1. Aery的UE4 C++游戏开发之旅(1)基础对象模型

    目录 UObject Actor种类 AActor APawn(可操控单位) AController(控制器) AGameMode(游戏模式) AHUD(HUD) ... Component种类 UA ...

  2. Aery的UE4 C++游戏开发之旅(3)蓝图

    目录 蓝图 蓝图命名规范 蓝图优化 暴露C++至蓝图 暴露C++类 暴露C++属性 暴露C++函数 暴露C++结构体/枚举 暴露C++接口 蓝图和C++的结合方案 使用继承重写蓝图 使用组合重写蓝图 ...

  3. Aery的UE4 C++游戏开发之旅(4)加载资源&创建对象

    目录 资源的硬引用 硬指针 FObjectFinder<T> / FClassFinder<T> 资源的软引用 FSoftObjectPaths.FStringAssetRef ...

  4. Aery的UE4 C++游戏开发之旅(5)字符&字符串

    目录 TCHAR 字符 使用TEXT()宏包裹字符串字面量 转换字符编码 FString 字符串 FString 剖析 FString 使用 FName 字符串 FName 剖析 FName 使用 F ...

  5. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

  6. 【安全开发】IOS安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  7. 【安全开发】Android安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  8. 《cocos2d-x游戏开发之旅》问题2016-10-7

    今天按书上做,遇到问题卡住了 书P115 项目是 littlerunner

  9. Cocos2d-x 3.x游戏开发之旅 笔记

    #include "HelloWorldScene.h"#include "SimpleAudioEngine.h"#include "MyHello ...

随机推荐

  1. 堆模板(STL版)

    题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...

  2. 【Android - 自定义View】之自定义可下拉刷新或上拉加载的ListView

    首先来介绍一下这个自定义View: (1)这个自定义View的名称叫做 RefreshableListView ,继承自ListView类: (2)在这个自定义View中,用户可以设置是否支持下拉刷新 ...

  3. Python Kite 使用教程 轻量级代码提示

    1: 概述 今天升级annacoda 插件 spyder  (4.0.0 )的时候 提示安装kite ,这是什么玩意? 下载下来试一试? 原来:就是一个代码提示插件.. 说白了" 就是让开发 ...

  4. 不用任何第三方,写一个RTMP直播推流器

    2016年是移动直播爆发年,不到半年的时间内无数移动直播App掀起了全民直播的热潮.然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端,无不需要专业的技术来支撑,仅仅推流端就有不少需要学习的知 ...

  5. DBCP2的使用例子和源码详解(不包括JNDI和JTA支持的使用)

    目录 简介 使用例子 需求 工程环境 主要步骤 创建项目 引入依赖 编写jdbc.prperties 获取连接池和获取连接 编写测试类 配置文件详解 数据库连接参数 连接池数据基本参数 连接检查参数 ...

  6. 【nodejs原理&源码赏析(1)】Express中间件系统的基本实现

    一直觉得express的中间件系统这种流式处理非常形象,就好像加工流水线一样,每个环节都在针对同一个产品的不同部分完成自己的工作,最后得到一个成品.今天就来实现一个简易的[中间件队列]. 一. API ...

  7. 鲲鹏凌云,并行科技Paramon通过华为云鲲鹏云服务兼容性认证

    随着Cloud2.0时代到来,5G技术开始应用普及,超算云服务需求不断升级,业务多样性.数据多样性不断延伸.2019年7月,华为召开鲲鹏计算产业发展峰会,依托在联接领域坚实的基础,华为未来将着力打造智 ...

  8. 浅议Grpc传输机制和WCF中的回调机制的代码迁移

    浅议Grpc传输机制和WCF中的回调机制的代码迁移 一.引子 如您所知,gRPC是目前比较常见的rpc框架,可以方便的作为服务与服务之间的通信基础设施,为构建微服务体系提供非常强有力的支持. 而基于. ...

  9. go实践之apiserver搭建

    文章目录 go实践之apiserver搭建 1.配置文件读取 2.数据连接 3.日志初始化 4.server初始化 5.接口编写 go实践之apiserver搭建 本文主要记录下博主用gin搭建app ...

  10. Mysql基础03-函数

    函数 字符串函数 函数 用法 CONCAT(S1,S2,......,Sn) 连接S1,S2,......,Sn为一个字符串 CONCAT_WS(s, S1,S2,......,Sn) 同CONCAT ...