/**
* 行继续操作符【\】:表示用符号\,连接的内容,都是定义同一个宏的内容
* #:表示将参数字符串化
* ##:表示连接内容
* 宏定义里有用'#'或'##'的地方宏参数不会展开,需要转换宏,进行展开
* inline:c++的关键字
* __inline: c和c++都可以用,功能与inline一致
* __forceinline:c和c++都可以用,不基于编译器的性能和优化分析而依赖于程序员的判断进行内联,
但它也不保证 一定内敛,有些情况函数是肯定不能内敛的
* 使用宏的好处:可以精简写法,易于复用;如:本例的方法可以快速定义类属性的set和get方法
* 使用宏的坏处:
1.在编写宏时,报错始终在使用宏的位置
2.报错不能确提示,对于发现错误不友好
3.不能对宏逻辑进行断点调试
*/
#define GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName,PropertyName) \
static std::string Get##PropertyName##Attribute() \
{ \
return #PropertyName; \
}
#define GAMEPLAYATTRIBUTE_VALUE_GETTER(ClassType,PropertyName) \
__inline ClassType Get##PropertyName() \
{ \
return PropertyName; \
}
#define GAMEPLAYATTRIBUTE_VALUE_SETTER(ClassType,PropertyName) \
__forceinline void Set##PropertyName(ClassType NewVal) \
{ \
PropertyName = NewVal; \
}
// Uses macros from AttributeSet.h
#define ATTRIBUTE_ACCESSORS(ClassName,ClassType,PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName,PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(ClassType,PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(ClassType,PropertyName)
class MyClass
{
private:
float Health;
public:
MyClass();
~MyClass();
ATTRIBUTE_ACCESSORS(MyClass,float,Health)
};
MyClass::MyClass()
{
Health = 20;
}
MyClass::~MyClass()
{
}
//#define A (2)
//#define STR(s) #s
//#define CONS(a,b) int(a##e##b)
//////////////////////////////////////////////////////////////////////////
#define A 2
#define _STR(s) #s
#define STR(s) _STR(s)/** 转换宏 [9/3/2020 ZC] */
#define _CONS(a,b) (int)a##e##b
#define CONS(a,b) _CONS(a,b)/** 转换宏 [9/3/2020 ZC] */
//////////////////////////////////////////////////////////////////////////
#define ANY_PACKAGE ((MyClass*)-1)
int main()
{
/** INT_MAX没有被展开 [9/3/2020 ZC] */
printf("int max:%s\n",STR(INT_MAX));
/** 不进行转换,编译错误,A没被展开 [9/3/2020 ZC] */
/** 转换后,编译正确 [9/3/2020 ZC] */
printf("CONS(a,b)=>%d\n",CONS(A,A));
MyClass Temp;
std::cout << MyClass::GetHealthAttribute() << std::endl;
std::cout << Temp.GetHealth() << std::endl;
Temp.SetHealth(100);
std::cout << Temp.GetHealth() << std::endl;
}
相关推荐
【虚幻引擎】使用Jetbrains Rider优化UE4 C++开发工作流
本文详细介绍了如何使用Jetbrains Rider优化UE4 C++开发工作流,包括环境配置、代码补全、调试技巧等关键内容。Rider作为专为游戏开发优化的IDE,提供对UE4项目的深度支持,如智能代码补全、蓝图关联和高效调试功能,显著提升开发效率。特别适合虚幻引擎开发者优化其C++开发环境。
【UE4】C++编程
右键.uproject会出现几个选项:.uproject是UE的项目描述文件,采用json的格式来描述一个项目的版本信息、模块信息、插件信息等。 .uproject参数描述文件— FileVersion:描述项目版本;EngineAssociation:引擎版本;Category:这个分类着实是不知道有什么卵用;Description:项目描述;Modules:模块信息,是一个类型的数组,数组中一个元素代表一个模块,的具体描述在ModuleDescriptor.h里面涉及很多模块的描述,最常使用的基本只
虚幻引擎之使用LoadClass加载蓝图类
虚幻引擎之使用LoadClass加载蓝图类 文章目录虚幻引擎之使用LoadClass加载蓝图类一、前言二、探究2.1 LoadClass2.2 HashObject参考文章 一、前言 看序列化相关代码,做测试时,使用 LoadClass 加载蓝图类。 发现如下代码不能成功加载。 UClass* StaticMeshClass = LoadClass<AActor>(nullptr, TEXT("Blueprint'/Game/Test/BP_StaticMesh.BP_StaticMesh'")
C++ 预处理器、宏、#与##
参考:C++ 预处理器 | 菜鸟教程 一、预处理器 预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。 我们已经看到,之前所有的实例中都有#include指令。这个宏用于把头文件包含到源文件中。 C++ 还支持很多预处理指令,比如 #include、#define、#if、#else、#line 等,让我们一起看看这些重要指令。 二、...
EpicGamesStore虚幻引擎高级技巧_2024-07-19_01-06-27.Tex
在材质函数编辑器中,你可以定义函数的输入和输出参数,这些参数可以是颜色、向量、标量等。
Contest 226 - C - Martial artist
from atcoder Problem Statement Time Limit: 2 sec / Memory Limit: 1024 MB Score :300300points Takahashi is a martial artist. There areNNmoves that a martial artist can learn, called Move11,22,\ldots…,NN. For each1 \leq i \leq N1≤i≤N, it takes...
[UE4笔记] C++ 宏的使用
最近做东西,写C++,一个函数除了出参不同,结构和入参,逻辑都是一样;但是所需的数量又挺多的, 最开始的时候就是写出来一个然后Ctrl C+Ctrl V,然后把出参改了。 后面网上查了一下宏在C++里面的用法,做个笔记记录一下: .cpp: #define IMPLEMENT_FUNCTION(StructName) \ void UXXXBPLibrary::Get##StructName(FString Str, F##StructName& Info) \ { \ TSharedPtr<
RTX 50系列显卡选购指南:从Stable Diffusion到深度学习,哪款最适合你的AI需求?
本文深入分析了RTX 50系列显卡如何满足不同的AI应用需求。针对Stable Diffusion图像生成,强调显存容量是关键;对于大语言模型本地推理,需平衡算力与显存;而深度学习训练则更看重算力效率。文章对比了RTX 5090、5080、5070等型号的核心规格与适用场景,并提供了从入门到专业的实战配置建议,帮助用户根据自身AI工作负载精准选择最具性价比的显卡。
UE4入门-常见的宏-UFUNCTION
基本功能:定义能够被UE识别的函数本文只对部分常用的修饰属性做用法说明,高端的后面接触到了再补充,大佬勿喷Unreal Engine version == 4.18.0 ; Virtual Studio 2017 update 15.4.2函数说明符 BlueprintAuthorityOnly 如果在具有网络权限的计算机(服务器,专用服务器或单人游戏)上运行,此功能只能从Blueprint代码执
基于pytest+Allure+Python+CANoe的汽车诊断自动化测试框架搭建实战
自动化测试是提升软件质量和研发效率的关键技术,其核心原理是通过脚本模拟人工操作,实现测试用例的自动执行与结果验证。在汽车电子领域,诊断服务测试是确保车辆ECU(电子控制单元)功能正常的重要环节,传统手动测试在面对海量用例和频繁回归时效率低下。本文聚焦于如何利用Python的pytest测试框架、Allure报告工具以及Excel数据驱动,构建一个与Vector CANoe仿真测试环境深度集成的自动化测试解决方案。该方案通过Python调用CANoe的COM接口,实现了诊断报文的自动发送与响应验证,并结合Al
人工智能训练师技能等级认定四级技能考核试卷-样题1
本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总分100分,考试时间150分钟。试卷涵盖数据处理、模型训练准备及系统维护等核心技能:1)垃圾分类数据集规范与处理(30分),要求评估数据格式并编写Python处理代码;2)学生成绩数据集分析(20分),涉及数据预处理、可视化及相关性分析;3)数据标注审核(10分),重点审核标注准确性;4)智能数据服务系统维护与优化(40分),包括安全帽数据集的项目创建、数据处理及平台协作。考核强调Python编程、数据处理平台操作及AI工作流程的实践能力。
UE4 C++:UPROPERTY宏、属性说明符、元数据说明符
UE4 C++基础:UPROPERTY宏
SPSS新手教程—两步聚类之结果解读
在《详解SPSS两步聚类之参数设置》一文中,我们已经了解了两步聚类的优点、分析原理,以及参数设置的技巧。 在本节中,会对IBM SPSS Statistics聚类后的结果进行解读,其中会涉及到最终聚类的结果、聚类的质量、变量重要性、聚类特征的解读。 如图1所示,我们先来回顾下本例数据在参数设置面板中的详细设置。 图1:二阶聚类设置 一、数值结果 根据上述参数设置,得到如下的数值分析结果。 首先看到自动聚类结果,如图2所示为聚类的透视表结果,展示了不同聚类数目下的BIC、BIC变化量、BIC变
[UE4]设置虚幻引擎的Visual Studio
设置虚幻引擎的Visual Studio
从外包到转正:一个华为OD亲历者的真实工作体验与避坑指南
本文分享了一位华为OD员工从外包到转正的真实经历与实用建议。通过详细解析华为OD的日常工作、转正核心指标、机试备考技巧及职场突围策略,为读者提供了一份全面的避坑指南。特别针对机试E卷的高频考点和刷题方法,给出了具体的数据分析和实战经验。
PyTorch生成式人工智能(1)——神经网络与模型训练过程详解
在本节中,我们介绍了传统机器学习与人工神经网络间的差异,并了解了如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现了反向传播以优化权重达到最小化损失值的目标。并实现了网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。
RE-UE4SS:虚幻引擎4/5脚本系统完全指南
RE-UE4SS是一个专为虚幻引擎4和5游戏设计的注入式Lua脚本系统平台,提供C++ Modding API、SDK生成器、蓝图mod加载器、实时属性编辑器和其他dump工具。该项目旨在为游戏Mod开发者提供强大的工具集,让Mod开发变得更加简单高效。 ## 核心特性 RE-UE4SS提供了一系列强大的功能,包括: - **Lua脚本API**:基于UE对象系统编写Lua Mod - **
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
UE4SS终极指南:从零开始掌握虚幻引擎游戏Mod制作
还在为游戏Mod安装而烦恼吗?想要轻松享受各种有趣的游戏扩展功能?UE4SS正是你需要的终极解决方案!这款强大的工具能够为虚幻引擎4/5游戏注入Lua脚本系统、SDK生成器、蓝图Mod加载器等丰富功能,让你彻底告别复杂的安装困扰。 ## 工具价值全景展示:为什么选择UE4SS? UE4SS是一款专为虚幻引擎游戏设计的Mod开发框架,它就像是为游戏世界安装了一个"万能工具箱"。无论你是想要简单的
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
SIMATIC S7-1200, S7-1500 PID 控制[手册]
SIMATIC S7-1200, S7-1500 PID 控制[手册]
学习虚幻C++开发日志——虚幻引擎反射系统
初识虚幻反射系统
UE4入门学习4:C++编程介绍
UE4直接使用C++作为逻辑层语言,这样引擎层与逻辑层语言统一,不需要胶水代码去转发,消除了逻辑层和引擎层的交互成本。为了便于开发,UE4对C++做了一些包装,比如反射和垃圾回收,大大减轻C++开发的难度。
UE4SS终极教程:5步轻松实现虚幻引擎脚本注入与调试
UE4SS是一个功能强大的开源工具,专为虚幻引擎4/5游戏提供LUA脚本注入、SDK生成、实时属性编辑等核心功能。无论你是游戏开发者、逆向工程师还是模组爱好者,掌握UE4SS都能让你在游戏修改和调试中游刃有余。本教程将带你从零开始,快速掌握这个强大的工具。 ## 环境准备与工具选择 在开始安装前,需要根据你的具体需求选择合适的版本和配置。 **版本选择指南:** | 版本类型 | 适用场景
UE4SS:虚幻引擎Mod开发入门与实战指南
在游戏开发与修改领域,运行时脚本注入和动态模块加载是扩展游戏功能的核心技术。其原理在于通过DLL注入等技术,在游戏进程内创建沙箱环境,从而允许外部代码安全地访问和修改游戏内存与逻辑。这项技术的价值在于,它极大地降低了游戏模组(Mod)开发的门槛,使开发者无需掌握复杂的逆向工程或拥有游戏源代码,就能实现从数值调整到机制创新的深度定制。在虚幻引擎(UE)生态中,这尤其适用于为《赛博朋克2077》、《艾尔登法环》等热门游戏创建个性化内容。UE4SS(Unreal Engine 4 Scripting System
终极UE4SS游戏修改工具:10分钟掌握虚幻引擎游戏修改技巧
还在为复杂的游戏修改而烦恼吗?UE4SS游戏修改工具为你提供了一站式解决方案。无论你是想为心爱的游戏添加新功能,还是想深入了解游戏内部机制,这个强大的工具都能让你轻松实现。UE4SS是一个专为虚幻引擎4/5游戏设计的注入式Lua脚本系统,集成了SDK生成器、实时属性编辑器等多种实用功能,让游戏修改变得前所未有的简单。 ## 🎮 为什么选择UE4SS进行游戏修改? 想象一下,你发现了一个有趣的
UE Viewer终极教程:解锁虚幻引擎资源宝库的完整指南
UE Viewer是一款功能强大的虚幻引擎资源查看与导出工具,支持从虚幻引擎1到4的所有版本。作为开源项目,它让开发者和爱好者能够轻松访问、查看和导出游戏中的3D模型、纹理、材质等视觉资源,是游戏开发学习、资源分析和二次创作的必备工具。 ## 🚀 快速入门:什么是UE Viewer? UE Viewer(非正式名称为"umodel")最初名为"Unreal model viewer",201
UE4C教程虚幻四C教程:掌握C++编程,创造卓越游戏体验
UE4C教程虚幻四C教程:掌握C++编程,创造卓越游戏体验 去发现同类优质开源项目:https://gitcode.com/ UE4 C++教程是专为虚幻引擎4开发者设计的全面教程资源,通过系统的教学,帮助用户深入了解并应用C++编程技巧,打造高质量游戏作品。 项目介绍 UE4 C++教程仓库是一个集结了丰富资源的下载平台,专注于教授开发者如何在虚幻引擎4(UE4)中使用C++进行编程。无论是初涉...
427




被折叠的 条评论
为什么被折叠?



