自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

斧冰

千淘万漉虽辛苦,吹尽狂沙始到金。

  • 博客(277)
  • 资源 (6)
  • 收藏
  • 关注

原创 C++重载相等运算符operator==的两种方式

最近复习了一下C++的一些基础知识,发现之前理解得不够深刻,或者当时只是简单过了一遍,复习的时候,有了一些新的收获。闲言少叙,书归正文:问题:C++的重载相等运算符operator==可以写成类成员函数,也可以写成全局普通函数,请问这对于同一个类型的两种重载相等运算符可以同时存在么?如何可以,那么它们的调用优先顺序是怎么样的?我们还是用一个例子来说明:#include <iostream>class Person{private: int m_age;public: Per

2020-09-02 10:47:36 20738 3

转载 C++的重载操作符(operator)介绍

转自:https://blog.csdn.net/liitdar/article/details/80654324本文主要介绍C++中的重载操作符(operator)的相关知识。目录1. 概述1.1 what1.2 why1.3 how1.3.1 将操作符重载实现为类的成员函数1.3.2 操作符重载实现为非类的成员函数(即全局函数)1.3.4 操作符重载的方式选择1.3.5 操作符重载的限制1.3.6 操作符重载的详细用法1. 概述1.1 whatoperator 是C++的一个关键字,它和运算符

2020-09-01 20:52:55 1571

原创 C++11起函数模板支持偏特化的疑惑

很多地方说“函数模板不能偏特化”,这个如果是按照03的标准来说,应该没有问题。(现在没有用之前的编译器测,如果这里有问题,请麻烦指正)。于是抱着怀疑的态度,测试了一下,函数模板的偏特化,等着编译器报错:template.h#ifndef TEMPLATE_H#define TEMPLATE_H#include <iostream>#include <map>template <typename T, typename U>void tfunc(T&am

2020-08-31 21:17:16 1306 2

原创 lua 判断table是否为空的正确做法

问题:local a = {}如何判断a是否为空表?做法一:如果a是数组,那么#a返回的是数组的长度,直接判断#a == 0就可以了。这个是前提的:a必须是数组才能这样做,或者有数字做key,其从1开始的。代码举例:local a = { ["2"] = "world", [2] = "Hello", ["3"] = "world2",}local b = {}local c = { ["2"] = "world", [1] = "Hello", ["3"] = "wor

2020-08-26 19:19:51 6699 2

转载 C++11 类型推导decltype(三)

decltype用于生成变量名或者表达式的类型,其生成的结果有的是显而易见的,可以预测的,容易理解,有些则不容易理解。大多数情况下,与使用模板和auto时进行的类型推断相比,decltype作用于变量名或者表达式只是重复了一次变量名或者表达式的确切类型:const int i = 0; // decltype(i) 为 const intbool f(const Widget& w); // decltype(w)

2020-08-21 11:24:01 528 1

转载 C++11 类型推导decltype(二)

目录一. decltype的意义二. decltype用法(1) 基本用法(2) 与const结合(3) 与引用结合(4) 与指针结合三、 decltype总结一. decltype的意义有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(初始化可以用auto)。为了满足这一需求,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。二. decltype用法(1)

2020-08-21 11:14:48 285

转载 C++11 类型推导decltype(一)

我们之前使用的typeid运算符来查询一个变量的类型,这种类型查询在运行时进行。RTTI机制为每一个类型产生一个type_info类型的数据,而typeid查询返回的变量相应type_info数据,通过name成员函数返回类型的名称。同时在C++11中typeid还提供了hash_code这个成员函数,用于返回类型的唯一哈希值。RTTI会导致运行时效率降低,且在泛型编程中,我们更需要的是编译时就要确定类型,RTTI并无法满足这样的要求。编译时类型推导的出现正是为了泛型编程,在非泛型编程中,我们的类型都是确定

2020-08-21 10:41:17 792

原创 C++中istringstream的简单用法

C++98中std::istringstream的构造函数是explicit istringstream (const string& str, ios_base::openmode which = ios_base::in);(默认构造函数,已经其他构造函数这里省略,只列举经常用到的构造函数)cplusplus上的文档第一个参数是const string& str可以通过const string& str对istrings

2020-08-20 19:37:11 13827

原创 C++中的std::boolalpha和std::noboolalpha用法

std::boolalpha, std::noboolalpha定义在头文件<ios> 中,平时使用的时候,包含#include <iostream>即可,如果你想知道为什么,看看这里的图就知道:Input/output library通过例子看他们两个的用法,非常简单:#include <iostream>int main(){ std::cout << std::boolalpha << "boolalpha true: " &

2020-08-20 10:21:42 1587

转载 C++ auto 关键字的使用

这篇文章对C++中的auto关键字的使用较为详细,故进行转载,并重新排版,留作日后复习的资料,也希望大家能有所收获。转自:https://www.cnblogs.com/KunLunSu/p/7861330.html目录C++98 autoC++11 autoauto的用法注意事项一、auto 变量必须在定义时初始化,这类似于const关键字。二、定义在一个auto序列的变量必须始终推导成同一类型。三、auto关键字做类型自动推导的规则1. 如果初始化表达式是引用,则去除引用语义。2. 如果初始化表达式

2020-08-19 10:34:18 1345

原创 C++ std::is_const的用法

在学习《深入应用C++代码优化与工程级应用》的第3章的时候,运行代码,发现一点印刷错误和自己在vs2017和mingw中运行的结果不同(运行结果以编译器中的为准)#include <iostream>#include <type_traits>int main(){ std::cout << std::boolalpha; std::cout << "is_const:" << std::endl; std::cout <&

2020-08-17 10:52:21 1564 3

原创 编译Qt vs版本的Cef库,利用二进制包进行编译

CEF二进制下载链接:Chromium Embedded Framework (CEF) Automated Builds目前是用vs2017编译x64的包给Qt用(windows上用mingw需要自己改源码,github上有个成功的例子)编译过程:下载页面:http://opensource.spotify.com/cefbuilds/index.html#windows64_builds下载链接:Standard DistributionStandard cef_binary_75.0.1

2020-07-28 21:27:16 1541 5

原创 Qt模型视图编程中重写rowCount函数需要注意的地方

先从实际中遇到的一个问题开始:要自定义一个QListModel,有两种选择:方式一:继承自QAbstractListModel方式二:继承自QAbstractItemModel二者都可以实现,但有差别。请问:在方式一中 int rowCount(const QModelIndex &parent = QModelIndex()) const override;这个函数应该怎么写才对?大家都知道这个函数的作用是返回列表中一共有多少行,但是这个函数怎么写才对?举例:int Ch

2020-07-22 17:30:43 3078

原创 Lua元表——实现集合运算(一)

Lua元表(Metatable)在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作。因此 Lua 提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。举个例子:local t1 = {1}local t2 = {2}local t3 = t1 + t2就会报错:lua: xx.lua:3: attempt to perform arithmetic on a table value (loca

2020-07-22 11:25:10 2299

原创 (爬坑实录)Qt 在windows下的命令行参数传递json字符串遇到的问题

Qt 在windows下的命令行参数传递json字符串遇到的问题记录:json字符串中的双引号会被直接干掉,导致json字符串解析失败,还有一些字符被转义了,后来查资料才知道windows命令行会对参数进行转义。Windows命令行参数的转义(dos/cmd.exe下输入双引号竖扛等特殊字符)解决办法:传入base64编码的字符串,然后在Qt程序中反编码一下。这样的话,解析的json字符串就不会有问题了。参考:Qt之Base64编解码Windows命令行参数的转义(dos/cmd.exe下输入

2020-07-21 15:22:20 1060

原创 Qt解决部分下载的图片读取失败问题

有时候,我们用Qt的QImage获取QPixmap读取图像,或者用load去加载的时候,发现加载不了图片,有时候会遇到这种情况。原因是图像的格式和后缀名不对应(一部分不对应的图片还是可以读取的,另外一部分就无法读取)。解决方法一直接用文件读取的方法,先读成QByteArray,再用QImage::fromData QFile file("1.jpg"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(

2020-07-21 15:12:53 2296

转载 lua 获取文件名和扩展名

local str = "aaa.bbb.bbb.txt"--获取文件名function getFileName(str) local idx = str:match(".+()%.%w+$") if(idx) then return str:sub(1, idx-1) else return str endend--获取扩展名function getExtension(str) return str:match(".+%

2020-07-21 10:02:50 1900

原创 Lua二进制方式拷贝文件(图片)

lua中没有文件拷贝的函数,但是有简单的文件读写函数。以二进制方式读取源文件的全部内容,然后再全部写到目标文件中,就完成了文件的拷贝1.luafunction copyFunc(destFilePath, sourceFilePath) local sourceFile, errorString = io.open(sourceFilePath, "rb") assert(sourceFile ~= nil, errorString) local data = sourceFile:read(

2020-07-19 16:30:54 2012

原创 lua file:read(“a“) 一次性读取大文件的源码分析

Lua读取文件时,一次性读取整个文件,输入文件的最大支持多大?找了官网文档也没找到说明,于是索性去看lua的源码。首先从liolib.c 开始看:/*** functions for 'io' library*/static const luaL_Reg iolib[] = { {"close", io_close}, {"flush", io_flush}, {"input", io_input}, {"lines", io_lines}, {"open", io_open

2020-07-19 16:12:44 4298

原创 lua中的string.len()的注意点

学过C语言的都知道,C语言里有个strlen,strlen() 函数计算的是字符串的实际长度,遇到第一个’\0’结束。就以为lua中的string.len()的用法也类似,其实不然,查官方帮助文档:(lua 5.3的)http://www.lua.org/manual/5.3/manual.html#pdf-string.lenstring.len (s)Receives a string and returns its length. The empty string “” hasleng

2020-07-18 16:05:56 4392

原创 windows环境下利用VS编译luasocket

为了更方便地学习和使用skynet框架,本地用lua写个简易客户端进行测试,也是个不错的选择。前提是你在windows上编译了一份动态库版本的lua,以下以vs2017编译器为例。动态库版本lua5.3.5一份,如果没有,我的之前博客:vs2017编译Lua最新源码,生成动态链接库版本下载地址:https://github.com/diegonehab/luasocket.git用vs2017打开luasocket.sln解决方案根据该解决方案的属性,它是根据几个环节变量来确定lua的头文件所

2020-07-15 20:41:21 2437 9

原创 skynet中的watchdog gate gateserver agent之间关系的理解

目录一、文件位置二、调用时序图三、简化图四、自己的理解五、实例为了理解skynet中的watchdog gate gateserver 和agent的关系,我看了skynet的源码,也找了很多博客,终于有了大致头绪。一、文件位置其中watchdog.lua agent.lua在文件夹skynet/examples下gate.lua在skynet/service文件夹下,gateserver.lua在skynet/lualib/snax文件夹下。二、调用时序图该图是用star UML画的,基本是

2020-07-15 16:48:21 2247

原创 利用Qt中的mingw编译Protocol buffer

下载地址:https://github.com/protocolbuffers/protobuf/releases目前最新版是Protocol Buffers v3.12.0-rc2经测试在windows上,用Qt Creator5.14.1自带的Mingw32 7.5版本编译会有错误:mingw32-make[2]: *** [CMakeFiles\libprotobuf-lite.dir\build.make:63: CMakeFiles/libprotobuf-lite.dir/E_/prot

2020-07-14 16:44:43 1140 2

原创 skynet框架应用——使用C编写的流水日志服务

这个log库是从github上的开源框架中看到的,发现其挺好用,就单独摘出来,作为单独的模块。该作者的github地址为:https://github.com/xiaozia/metoo输出的日志格式方便自定义,比如是下面这样:[INFO] 2020-07-13 05:40:22 [main] [./demo/main.lua:10] start main info test...[ERROR] 2020-07-13 05:40:22 [main] [./demo/main.lua:11] star

2020-07-13 21:09:54 1481

原创 QDir递归删除文件夹(包括该文件夹中的文件)的简单方法

比如删除一些临时目录,该文件夹中的文件又不多的时候,该函数就派上用场了:实例代码:QDir dir("目标文件夹名");dir.removeRecursively();官方文档这样说:bool QDir::removeRecursively()Removes the directory, including all its contents.Returns true if successful, otherwise false.If a file or directory cannot

2020-07-11 17:26:03 2223

原创 Qt中利用QDirIterator获取目录下的所有文件

您可以使用QDirIterator一次遍历一个目录。它类似于QDir::entryList()和QDir::entryInfoList(),但因为它一次只列出一个条目,而不是一次列出所有条目,它的扩展性更好,更适合大目录。之前我们看到很多用递归的方式进行遍历的,用迭代器方法的效率用法一:列举全部文件(不包含链接) QString path = "目标路径"; QDirIterator iter(path, QDir::Files | QDir::NoS

2020-07-11 17:14:55 5772

原创 Qt Remote Object(QtRO)解决找不到rep_xx_source.h或rep_xx_replica.h的终极方法

手动生成rep_xx_source.h或rep_xx_replica.h的方法repc命令的位置和参数手动生成rep_XX_replica.h手动生成rep_XX_source.h在用的时候,发现一些问题,我的Qt Creator版本是5.14.1,在使用Qt Remote Object(QtRO),发现几个影响rep_xx_source.h或rep_xx_replica.h生成的问题。关于.rep书写的格式,参照官方文档:Qt Remote Objects CompilerREPC_REPLICA

2020-07-10 16:16:27 1455

原创 Qt Remote Object(QtRO)实现进程间通信——遥控小车(二)

还是先看看运行效果:这次我们再Rep文件中使用枚举class CommonInterface{ ENUM CarOperation { Accelerate, Decelerate, TurnLeft, TurnRight } SIGNAL(sigMessage(CarOperation operation)) //server下发消息给client}如果你用的Qt版本是5.9的话,这里可能会有问题,我

2020-07-05 18:08:02 1026

转载 Qt Remote Object(QtRO)实现进程间通信——遥控小车(一)

Q-Bus的官方例子是个遥控小车在windows上自己手动编译了dbus,但还是跑不起来,在搜索Qt进程通信方式的时候,无意中看到Qt Remote Object(QtRO),这种方式支持跨进程的信号与槽,就尝试着用QtRO来改造这个遥控小车,让它跑起来。看看我们的运行效果:最后发现用QtRO其实更好用,前提是你的Qt版本是5.9及以上,如果不是的话,考虑用QLocalSocket和QLocalServer来实现(同一台电脑,如果是不同电脑,就用QTcpServer和QTcpSocket来实现,或

2020-07-05 11:49:09 2947 5

原创 将luarocks整合进openresty,并安装lfs

现在需要用openresty实现一个文件夹遍历的功能,需要LuaFileSystem(简称lfs)。第一步:将luarocks整合进openresty下载地址:https://luarocks.github.io/luarocks/releases/下载最新版的源码包即可。将下载的源码包解压,进行以下配置:$ wget https://luarocks.org/releases/luarocks-3.3.1.tar.gz$ tar zxpf luarocks-3.3.1.tar.gz$ cd

2020-06-27 18:02:48 2012

原创 http报头之通用报头,请求报头,响应报头和实体报头

http报头通用报头请求报头响应报头实体报头HTTP消息报头包括通用报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。通用报头通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。既可以出现在请求报头,也可以出现

2020-06-26 10:37:00 2045

转载 HTTP协议中Content-Type

HTTP协议中Content-Type关于content_typecontent_type语法GET常见数据的提交类型POST常见数据的提交类型application/x-www-form-urlencodedmultipart/form-dataapplication/jsonbinary (application/octet-stream)关于content_typeContent-Type是实体头域(或称为实体头部,entity header)用于向接收方指示实体(entity body)的介质类

2020-06-26 10:07:54 1098

原创 OpenResty配置文件下载

sendfile: 设置为on表示启动高效传输文件的模式。sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据。如果这个参数不开启,会先在用户空间(Nginx进程空间)申请一个buffer,用read函数把数据从磁盘读到cache,再从cache读取到用户空间的buffer,再用write函数把数据从用户空间的buffer写入到内核的buffer,最后到tcp socket。开启这个参数后可以让数据不用经过用户buffer。参考:Nginx --sendfile配

2020-06-25 16:45:58 1538

原创 linux查看端口被占用情况,并结束占用该端口进程

Linux 查看端口占用情况可以使用 lsof 和 netstat 命令(如果发现这两个命令提示没有找不到的话,就需要安装相应的lsof 和 net-tools)另外:ps -ef|grep 进程PID可以获取已经知道进程ID的进程更多信息kill -9 进程PID命令则可以直接杀死相应进程。这几个命令配合起来,可以完成这样一个任务:希望查看8080进程被哪个进程占用,如果这个端口有被进程占用,就杀死该进程和它的子进程。首先第一步,查看8080端口被哪个进程占用。方式一:lsof(

2020-06-25 15:49:53 11582 1

原创 openresty利用插件lua-resty-moongoo操作mongodb

本文采用lua-resty-moongoo库,地址为:https://github.com/isage/lua-resty-moongoo第一步:下载https://github.com/isage/lua-resty-moongoo我们可以看到这个库下载下来后的目录层级结构,在lib文件夹下有resty文件夹,将resty文件夹中的moongoo(包括其子目录以及所有文件)和moongoo.lua文件拷贝到/usr/local/openresty/lualib/resty(备注:我安装的Ope

2020-06-23 20:42:31 1255

原创 skynet中使用cjson

skynet早期版本有lua-cjson库,后来使用sproto取代了cjson,也直接将代码移除,但游戏中还是有json的需求。lua5.3开始支持整形,但cjson并没有适配lua5.3, 如果直接编译使用会造成将json串中的数字转为浮点数。所幸云风为cjson出一个补丁:https://github.com/mpx/lua-cjson/pull/22当然如果感觉麻烦,还可以直接使用云风维护的一个分支:https://github.com/cloudwu/lua-cjson这里以skynet中

2020-06-19 19:54:57 1412

转载 实现百万并发的服务器端框架图解

本文内容转自:Golang实现百万并发但内容并不局限于Go语言,而是服务器框架都要解决的问题,原文用图示简单易懂,转来这里是为了以后复习。以下是具体内容:这篇文章源自Handling 1 Million Requests per Minute with Go。原文中的例子是一个HTTP服务器,将上传的Json文档写入亚马逊的简单存储服务(S3)。这是一个异步服务,不需要等到存储真正完成,收到请求后可以立刻返回。在这里我们用一个例子来类比上面的工作,有一条传送带(网络),源源不断的运来小球(来自客户端

2020-06-17 14:24:13 986

原创 boost.asio的异步echo服务器端的std::bind实现

C++11以来,提供了不少遍历,原来在boost库中的一些工具,也进入到了C++标准库中。boost作为“准”标准库也C++尽可能需要掌握的知识和技能。现在采用std::bind方式实现异步echo服务器端,后面会采用lambda表达式重新实现一遍,比较二者的差异,采用自己喜欢的方法就可以了。完整代码:// Asynchronous echo server.#include <array>#include <functional>#include <iostrea

2020-06-16 11:45:38 673

原创 boost.asio的同步echo服务器端和客户端实现

// Synchronous echo server.#include <array>#include <iostream>#include <string>#include "boost/asio.hpp"using boost::asio::ip::tcp;enum { BUF_SIZE = 1024 };void Session(tcp::socket socket) { try { while (true) { std::arra

2020-06-15 11:00:05 565

原创 Qt的事件传递过程和事件过滤器的示例

每个程序main ()函数的最后都会调用QApplication类的exec()函数,它会使应用程序进入事件循环,这样就可以使应用程序在运行时接收发生的各种事件。一旦有事件发生,Qt便会构建一个相应的QEvent子类的对象来表示它,然后将它传递给相应的QObject对象或者其子类对象。举例一:新建Qt Widget应用,项目名为myevent,基类选择QWidget,类名保持Widget不变。第一步:添加一个MyLineEdit类,头文件为mylineedit.h,源文件为mylineedit.cp

2020-06-13 15:26:22 924 5

QML自定义菜单样式

利用QML写的菜单样式,适合项目中用,定义了MenuItem和MenuBar的样式。实现是在Qt5.12.0中,应该是Qt5.10及以上都可以的。

2019-05-04

cef_binary_75.0.1+gb5e74dd+chromium-75.0.3770.80_windows64.tar.bz2

cef_binary_75.0.1+gb5e74dd+chromium-75.0.3770.80_windows64.tar.bz2

2021-03-24

QsLogDemo的工程,可在界面显示日志,同时将日志写入文本

自己做的QsLog的使用demo,连接信号与槽,可以将日志显示在界面和本地文本也会有日志。Qt5.8.0用可以运行,Qt5.x都可以运行。

2018-11-01

QML state状态切换实例

QML中利用State,切换状态的代码小例子,点击左上角的刷新按钮,会切换状态

2018-06-29

抽象工厂Red_Shape的C++实现

抽象工厂Red_Shape的C++实现,设计模式中的抽象工厂模式

2018-02-02

todo-list.zip

QML编写的1.实现了一个简单的待办事项;2.删除勾选的一行记录,也可以删除多行已经勾选的记录;用C++继承QAbstractListModel实现了model,用QML中的ListView显示

2019-05-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除