自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

c++

  • 博客(26)
  • 收藏
  • 关注

原创 多路复用select、poll、epoll总结

多路复用模型总结

2023-02-27 20:10:29 395

原创 Linux及Windows下编译exosip和osip2源码

Linux和Windows平台下exosip及osip库的编译和应用

2022-11-29 15:23:33 3402

原创 Qt中嵌入web网页的几种实现方式

1、背景Web网页的界面交互相比较Qt客户端而言有着比较大的优势:更加的多样化和更高的使用便捷性使得我们即使在客户端中也可以考虑将web网页嵌入到客户端的界面当中。如此便能将web的优势和客户端进行结合。更加丰富客户端的界面及功能,以下将介绍几种常见的Qt客户端中嵌入web网页的实现方案和实现步骤。2、实现方案设计1、基于Qt自带控件实现1.1简介在Qt中,提供了一个用于访问网页的控件(不同的Qt版本对应不同的控件模块),集成了浏览器的webkit内核和google的引擎,不严谨的说,这个控件其实

2022-05-07 14:17:41 15668

原创 通达信XMA偏移移动平均

XMA简介XMA函数是一个未来函数,XMA(X,M)为X的M日偏移移动平均,M为奇数有效(偶数自动加1)1,2,3,4,5,6,7,8,9,10在7当日取XMA(X,3) = 6 + 7 + ((6+ 7 ) /2 );(M+1)/2之后的数据是未知的,这里用之前所有数据的平均值来代替。针对7这个节点来说8这个数据是未知的,这里用(6+7)/2来代替8的值,但是当第8节点的值确认以后,7节点的XMA会自动根据实际值来进行重新计算。所以会存在一定的数据漂移现象。这里是对未来数据的预测,否定了随机性,

2022-05-05 11:58:04 6524

原创 tcpdump命令总结

tcpdump常用参数说明(一)、学习tcpdump的5个参数 初次使用tcpdump时,使用tcpdump -h命令可以看到它有数十个参数。根据我们在运维工作中的经验,掌握tcpdump以下5个参数即可满足大部分的工作需要了。❶-i参数。使用-i参数指定需要抓包的网卡。如果未指定的话,tcpdump会根据搜索到的系统中状态为UP的最小数字的网卡确定,一般情况下是eth0。使用-i参数通过指定需要抓包的网卡,可以有效的减少抓取到的数据包的数量,增加抓包的针对性,便于后续的分析工作。❷-nnn参数。使

2022-01-21 10:34:53 346

原创 c++观察者模式

观察者模式1、观察者模式简介  观察者模式也叫发布-订阅模式、模型-视图模式、源-监听器模式以及从属者模式,观察者模式定义了对象之间的一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。2、实例讲解  假如张三、李四、王五三人都订阅了环球日报的报纸。那么当环球日报的报纸有更新的时候就会送到他们三人手中。//报纸接口类class NewsPaperBase{public: //添加订阅者 virtual void RegisterSubscri

2022-01-14 11:46:44 126

原创 c++模板方法模式

模板方法模式1、模板方法模式简介定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2、模板模式和策略模式区别策略模式:定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。关键点在于每个算法都是过程完整且独立的。模板方法模式:模板则是将骨架定义好,例如执行的步骤或先后顺序。骨架中的部分在父类中进行实现,而子类的个性化行为则由子类继承再加以实现。区别的本质就是策略模式是替换了整个流程。而模板模式替换的是固定流程中的

2022-01-13 19:46:23 638

原创 c++策略模式

策略模式1、策略模式简介在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。该模式使得算法可独立于使用它的客户而变化。2、策略模式应用场景1)如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。2)一个系统需要动态地在几种算法中选择一种。3)如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。3、策略模

2022-01-13 11:39:34 208

原创 c++享元模式

享元模式1、享元模式简介  享元模式在《设计模式:可复用面向对象软件的基础》一书中是这样说的:运用共享技术有效地支持大量细粒度的对象。本质就是对大量细粒度的对象进行共享,不是每个对象都要通过new的方式去创建,而是通过区分对象的内部状态和外部状态来实现共享。以此来达到减少系统的开销,提高程序性能的目的。2、应用场景  在某个类在系统中有大量的实例时,并且可根据这些实例的特征分离出内部状态可外部状态。3、实例讲解  以五子棋为例,常规情况如果每下一颗棋就去new一个对象的话。会造成大量重复的系统

2022-01-12 11:41:50 106

原创 c++组合模式

组合模式1、组合模式简介  组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户可以一致的方式处理单个对象或对象的组合。组合模式的关键是定义了一个抽象构件类,它既可以代表叶子,又可以代表容器,而客户端针对该抽象构件类进行编程,无须知道它到底表示的是叶子还是容器,可以对其进行统一处理。2、组合模式应用场景当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。基本对象可以被组合成更复

2022-01-11 20:26:12 260

原创 C++桥接模式

桥接模式1、桥接模式简介及应用场景  桥接模式在《大话设计模式》一书中的定义是:将抽象部分与它的实现部分分离,使它们都可以独立地变化(抽象部分是指接口,实现部分是指继承接口的实体类)  桥接模式可作为替代多重继承的一种方案,其主要应用场景为:一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展时2、桥接模式举例  根据程序员的发展方向可分为前端和后端,不管是哪种程序员根据水平的高低还可分为,初级、中级和高级程序员。那么当我们想要分别获得,前端及后端各个等级的程序员对象时

2022-01-11 14:03:39 325

原创 C++外观模式

外观模式1、外观模式简介及应用场景  外观者模式其实就是相当于对一组子系统功能的组合,对外提供统一的简单接口的模式。当我们在实际开发中,一般情况下是一个单独的子系统对应的是一个独立的功能模块,但是随着业务功能的不断增加,对应子系统的迭代必然是越来越复杂的。此时便可引入外观模式:将必要的子系统的功能进行归类封装成一个简单的接口即可。2、区别与代理模式及适配器模式  代理模式的本质是相当于增加了一个访问的中间层,为业务逻辑判断等做一些必要的处理。适配器模式主要是为了解决两个类中需要互相耦合但是接口互

2022-01-10 20:36:26 197

原创 C++适配器模式

适配器模式1、适配器模式简介  适配器模式其实是实现了两个互不兼容的已有系统之间的桥梁效果,所以适配器模式可以说是为了实现功能的一种补救措施,最好的方式是将系统重构使用工厂模式即可,但是对已有系统的重构代价过大,所以一般情况下我们都会通过适配器模式来解决此类问题。2、适配器模式适用场景  两个互不相关且接口相互隔离互不兼容的类由于某些原因而需要相互配合一起工作时使用3、举例说明  A系统和B系统是两个互不相关的系统,现在需要在A接口中实现B系统里的功能,那么就可引用适配器模式,将适配器继承自A系

2022-01-07 20:22:42 290

原创 C++代理模式

代理模式1、代理模式简介  代理模式按照使用场景来划分可分为多种,如:远程代理、虚拟代理、防火墙代理、Cache代理及智能引用代理等。但是不管是哪种代理模式只是在使用场景上有所区分,而在具体的实现思想上则大致相同。2、代理模式的使用场景  主要是为其他对象提供一种代理以控制对这个对象的访问。如现有A对象和C对象,C对象想要访问A对象,在这个流程中就可按照需求及场景来使用代理模式,通过引用B对象来实现C对象对A对象的访问(C->B->A)3、和适配器及装饰者模式的区别  适配器模式主要

2022-01-07 19:24:46 627

原创 C++装饰者模式

装饰器模式1、装饰器模式的适用场景  装饰器模式适用于,为一个已有功能的类增加新的功能或职责。增加功能或职责通过在类中增加或修改也可以达到目的,但这种方式会违背开闭原则。当然还有一种方法也能达到扩展功能的目的即:通过子类继承的方式,但是如果后续继续增加功能的话,便要继续继承现有的类,如此就会使继承的层次越来越深,不利与代码的维护和可读性。故最好的方式便是通过装饰者模式来完成。2、装饰器模式的关键实现点1、被装饰者和装饰者需要继承同一基类。此处的装饰者一般继承为纯虚函数(不实现具体的装饰过程,由子类【

2022-01-06 15:38:04 652

原创 C++工厂模式

1、设计模式分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。2、设计模式的六大设计原则单一职责原则:类的设计尽量做到只有一个原因可以引起它的改变里氏替换原则:只要父类出现的地方子类就可以出现

2022-01-06 11:24:29 211

原创 c++单例模式:饿汉式、懒汉式、线程安全懒汉式、静态对象式

设计模式分类及原则1、设计模式分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。2、设计模式的六大设计原则单一职责原则:类的设计尽量做到只有一个原因可以引起它的改变里氏替换原则:只要父类出现

2022-01-05 11:34:11 2682

原创 cmake命令内置变量及实例讲解

CMake一、 CMake简介CMake是一个开源、跨平台的工具家族,旨在构建、测试和打包软件。CMake用于使用简单的平台和编译器独立的配置文件来控制软件编译过程,并生成可以在您选择的编译器环境中使用的本地makefile和工作区。该CMake工具套件是由Kitware创建的,以满足对开源项目(如ITK和VTK)的强大、跨平台构建环境的需求。——https://cmake.org/二、CMake安装及命令1、Linux下的CMake安装使用cmake –version命令后查看是否有相关信息,

2021-12-29 15:53:56 3336

原创 c++ std::string截取子串

std::vector<std::string> StringSplit(const std::string& s, const std::string& delim){ std::vector<std::string> elems; size_t pos = 0; size_t len = s.length(); size_t delim_len = delim.length(); if (delim_len == 0) return elems;

2021-06-30 11:57:14 2606

原创 new(std::nothrow)

new(std::nothrow) 顾名思义,即不抛出异常,当new一个对象失败时,默认设置该对象为NULL,这样可以方便的通过if(p == NULL) 来判断new操作是否成功普通的new操作,如果分配内存失败则会抛出异常,虽然后面一般也会写上if(p == NULL) 但是实际上是自欺欺人,因为如果分配成功,p肯定不为NULL;而如果分配失败,则程序会抛出异常,if语句根本执行不到。...

2021-06-30 11:56:34 158

原创 消息中间件之ActiveMQ

消息中间件:1、概述消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。2、消息中间件的组成 2.1 Broker消息服务器,作为server提供消息核心服务 2.2 Producer消息生产者,业务的发起方,负责生产消息传输给broker, 2.3 C

2021-06-30 11:19:12 132

原创 c++基本文件操作接口封装

// -------------------------------------------------------------------------// @FileName : FSFileHelper.hpp// @Date : 2020-05-28// @Module : FSFileHelper//// ---------------------------------------------

2021-05-28 10:33:36 313

原创 宏定义中 While(0)的作用

宏定义中的while(0) 起到分号的作用,避免编译器报错。#define FUN_AFTER(con, fun) do { std::string fun_name = #fun; std::cout << " After " << fun_name << " :\n"; fun;

2021-05-28 10:27:01 606

原创 windows.h重复包含 byte重定义

#ifndef NOMINMAX #define NOMINMAX#endif#define byte win_byte_override#include <windows.h>

2021-05-28 10:07:49 417

原创 QT的TableView实现多级表头

QT的TableView实现多级表头最近项目需要支持多级表头,QT本身不支持。网上找到一个大佬重写QHeaderView表头实现。demo如下:FSItemDelegate.h#pragma once/*自定义委托类*/#include <QItemDelegate>#include <QSpinBox>#include <QDoubleSpinBox>#include <QComboBox>#include <QStanda

2021-04-29 16:59:00 4374 6

原创 AES加密的BCB模式加密解密c++实现

解密为xml 文件,xml文件为utf8的BOM格式则会崩溃,需转成无BOM#AES.h//AES.h#ifndef _AES_H#define _AES_H#include <exception>#include <cstring>#include <string>#define BLOCK_SIZE 16using namespace std;class AES{public: enum { ECB = 0, CBC = 1, CF

2021-04-29 16:13:04 720

空空如也

空空如也

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

TA关注的人

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