C++
Michael Liew
专精UE4游戏开发
展开
-
了解Boost序列化的版本控制
serialize、save 和 load 的方法签名都使用无符号整数版本作为最后一个参数。这些数字有什么用?随着时间变化,类的内部变量名称可能发生变化,添加新的字段或移除已有字段,等等。这是软件开发过程中的自然进程,除了归档文件仍然保存着关于数据类型原有状态的信息。为了规避这个问题,需要使用版本号。我们举一个 date 类的例子。假设您在 date 类中引入一个名为 m_tag、类型为原创 2014-04-16 14:41:04 · 2820 阅读 · 0 评论 -
UE4坑--打不开工程,进度一直卡在72%
今天遇到一个坑,那是相当的坑呀!(前提说明:这是一个C++工程,GameMode类被一个蓝图继承)做的好好工程关闭之后再也打不开了,每次打开的进度走到72%就卡住不走了,等很久都不动,然而Log文件中没有任何错误,还很诡异的停止在某个地方没写完,如下:[2016.12.20-14.49.41:164][ 0]LogMeshUtilities: No automatic mesh reduct原创 2016-12-20 23:34:42 · 15341 阅读 · 3 评论 -
UE4的C++代码中的class关键字起什么作用?
在虚幻代码中四处可见用到了class这个关键字,变量声明、参数传递、模板类型等等。不写这个关键字还编译不过,那么这个关键字到底起什么作用呢?答案是:前置声明原创 2016-12-16 13:42:54 · 1952 阅读 · 0 评论 -
UE4-强大引擎注意细节之Bit Fields
注意到虚幻引擎里面喜欢用uint8 bNetTemporary:1;这种方式来声明一个布尔型变量,我看到以后觉得有趣就搜索了一下,原因是引擎在设计的时候注重细节,使用了C++ Bit Fields这个特性。具体的细节可以查看MSDN:https://msdn.microsoft.com/en-us/library/ewwyfdbe.aspx。 简单来讲就是如果用bool来声明会占用32/原创 2016-09-21 13:31:48 · 1488 阅读 · 1 评论 -
error link 2019问题
IGfx7d.lib(GDIpInterface.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: char const * __thiscall std::basic_string,class std::allocator >::c_str(void)const " (__imp_?c_str@?$basic_str原创 2014-04-28 15:01:36 · 1241 阅读 · 0 评论 -
Qt 实现类反射机制
在java语言中,可以使用getObject(String)函数,从类型直接构建新的对象。而在C++中是没有这种机制的,Qt虽然提供了元对象机制,但只可以获取对象的类名,不能反向构建。这个问题我在百度上找了很多,但都没有满意的答案,索性翻出去google一下,终于找到了解决方法。原文地址: http://www.mimec.org/node/350代码如下:ob转载 2015-04-25 19:22:12 · 5889 阅读 · 4 评论 -
CMake的简单例子
CMake 简介CMake是一个跨平台的自动化建构系统,他使用一个名为CMakeLists.txt的文件来描述构建过程,可以产生标准的构建文件,如Unix的Makefile或Windows Visual C++的projects/workspaces。文件CMakeLists.txt需要手工编写,也可以通过编写脚本进行半自动的生成。CMake提供了比autoconfig更简洁的语法。在Li转载 2014-09-04 09:55:02 · 1243 阅读 · 0 评论 -
Qt正则表达式QRegExp
"^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\d+)|(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?\d+$" //整数 "^\d+(\.\d转载 2014-09-12 14:30:01 · 701 阅读 · 0 评论 -
CMake 用法导览
转自:http://www.cnblogs.com/coderfenghc/archive/2013/01/20/2846621.html Preface : 本文是CMake官方文档CMake Tutorial (http://www.cmake.org/cmake/help/cmake_tutorial.html) 的翻译。通过一个样例工程从简单到复杂的完善过程,文档介绍了CMake转载 2014-09-04 10:20:46 · 837 阅读 · 0 评论 -
Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL
开发环境:VS2008、Qt4.7.4,附件有源码可供下载 最近在总结如何访问DLL中的类对象及其成员函数,其中一种方法利用Qt的QPluginLoader类就可以方便快捷的访问DLL中的类,以及其中的类成员函数。 文件结构如下图:解决方案名:TestPlugin1、Qt的Library项目(PluginDll):PlugInterface.h、PluginIn转载 2014-06-13 11:37:05 · 693 阅读 · 0 评论 -
【转】深度解析 Qt 中动态链接库
转载:http://mobile.51cto.com/symbian-270525.htm本文介绍的是Qt 中动态链接库,现在有些软件有自动升级功能,有些就是下载新的DLL文件,替换原来的动态链接库,MFC好象也有类似机制,Qt还有一种方式,就是把一个QWidget子类,编译成动态链接库.然后根据动态链接库创建一个对象,返回QWidget子针,如果你的类不是QWidget的子类转载 2014-06-13 11:25:40 · 650 阅读 · 0 评论 -
【转】DLL中类的显式链接
DLL的显式链接在某些时候比隐式链接具有更大的灵活性。比如,如果在运行时发现DLL无法找到,程序可以显示一个错误信息并能继续运行。当你想为你的程序提供插件服务时,显式链接也很有用处。显式链接到全局C/C++函数非常简单。假设你想调用DLL中的一个函数ExportedFn,你可以像这样很简单地导出它:extern "C" _declspec(dllexport)void Exported转载 2014-06-13 11:27:49 · 518 阅读 · 0 评论 -
Qt DLL总结【一】-链接库预备知识
1、链接库概念静态链接库和动态链接库介绍 我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心。 这个文件叫做 “库(Libary)”,平时我们把编译好的目标代码存储到“库”里面,要用的时候链接程序帮我们从库里面找出来转载 2014-06-13 11:29:49 · 659 阅读 · 0 评论 -
Qt DLL总结【二】-创建及调用QT的 DLL
最近看了不少Qt的DLL例子,总结一下如何创建和调用QT 动态链接库。 先讲一下对QT动态链接库的调用方法,主要包括:1、显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法2、显示链接DLL,调用DLL中类对象、成员函数。(通过对象即可实现类成员函数的调用) ①用虚函数表的方法,这也是COM使用的方法,利用Qt的QLibrary技术调用;②用GetPr转载 2014-06-13 11:33:59 · 829 阅读 · 0 评论 -
Boost的万能转换器-->lexical_cast
boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"123"转换成整数123,代码如下:string s = "123"; int a = lexical_castint>(s); 这种方法非常简单,笔者强烈建议大家忘掉std诸多的函数,直接使用boost:: lexical_cast。如果转换发生了意外,lexical转载 2014-06-25 14:15:16 · 723 阅读 · 0 评论 -
UE4 GENERATED_UCLASS_BODY 与 GENERATED_BODY 区别
今天我们来详细说说GENERATED_UCLASS_BODY和GENERATED_BODY的区别,GENERATED_BODY标识的类的成员默认是private的,GENERATED_BODY标识的类需要声明无参数的构造函数,GENERATED_UCLASS_BODY可以不声明构造函数(如果要实现构造函数需要加上const FObjectInitializer& ObjectInitializer原创 2017-02-16 15:11:00 · 3117 阅读 · 0 评论