自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 VS2017 x64 编译OSG 3.7.0 + FFmpeg + OSGEarth 3.4

OSG+OSGEarth+FFmpeg+SilverLining+Triton编译

2023-07-12 16:16:28 458 2

原创 C++20新特性

语言特性__has_cpp_attribute检查是否存在由属性标记命名的属性,例如deprecated等#include <iostream>#ifdef __has_cpp_attribute #if __has_cpp_attribute(deprecated) #define DEPRECATED(msg) [[deprecated(msg)]] #endif#endif#ifndef DEPRECATED #define DEP

2022-05-19 17:18:21 824

原创 C++17新特性

关键字constexpr扩展constexpr使用范围,可作用与if和lambda表达式template <bool ok>constexpr void func(){ constexpr if(ok) { cout << "ok";//若ok为true,则else不参与编译 } else { cout << "not ok";//若ok为false,则if不参与编译 }}constexpr auto fnSub = [](int

2022-05-09 16:26:21 61967

原创 C++14新特性

auto返回值推导在C++14中,auto可以对返回值进行推导,而C++11中,需要后置返回值,例如:auto func(int a, int b){ return a + b;}//返回值推导为int类型 C++14auto func(int a, int b) ->int{ return a + b;}//C++11当多个return语句时,需要保证返回值为同一类型泛型lambdaC++14中,lambda支持对参数的类型推导,类似于模版,而C++11中需要指定

2022-05-07 15:44:33 1034

原创 C++11新特性

long long & unsigned long longlong long 超长整型是 C++ 11 标准新添加的对于有符号 long long 整形,后缀用 “LL” 或者 “ll” 标识。例如:long long a = 10ll;对于无符号 long long 整形,后缀用 “ULL”、“ull”、“Ull” 或者 “uLL” 标识。例如:unsigned long long b = 10ull;在<climits>头文件中的LLONG_MIN、LLONG_MAX 和

2022-05-06 17:11:20 1395 2

原创 C++25设计模式汇总

写在开头建议各位学习设计模式时,尽量不要直接抄代码,而且去理解它,使用自己想的思路去写出来,这样才能更加理解设计模式!设计模式分为三大类:创建型模式五种:简单工厂模式、抽象工厂模式、单实例模式、建造者模式、原型模式结构型模式七种:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式行为型模式十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式额外两种模式:MVC模式、线程池模式设计模式

2022-04-19 09:23:42 279

原创 C++25设计模式之线程池模式

图片引用于百度简介:线程池模式是指创建多个线程来执行多个任务,这些任务通常组织在一个队列中。正在执行的任务的结果也可能放在队列中,或者任务可能没有返回任何结果。通常,任务比线程多。一旦一个线程完成了它的任务,它就会从队列中请求下一个任务,直到所有任务都完成为止。然后线程可以终止或休眠,直到有新任务可用。优点:降低消耗资源、提高响应速度和线程管理性缺点:由于管理着一定数量的线程并时刻等待任务,会占据一定的资源。例子背景:实现线程池打印全局变量线程池模式代码:头文件:#pragma once.

2022-04-19 09:22:36 647

原创 C++25设计模式之MVC模式

图片引用于百度简介:MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。优点:分工明确,通过MVC模式可以把数据库的开发,程序业务逻辑开发以及页面开发分开,这样方便后期的代码维护,也使的程序员之间分工更加明确。重用性高,多个视图共享一个模型缺点:没有明确的定义,完全理解它是很困难的因为它的内部原理比较复杂所以得花时间去学习理解。降低.

2022-04-19 09:22:29 1558

原创 C++25设计模式之解释器模式

图片引用于百度简介:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子优点:扩展性、灵活性比较好,易于实现简单文法缺点:可利用场景的比较少,对于复杂的文法比较难维护并且会引起类膨胀例子背景:解释一段汇编加减乘除代码解释器模式代码:上下文类:#pragma once#include <string>#include <iostream>#include <list>#include <map>u.

2022-04-19 09:22:21 443

原创 C++25设计模式之中介模式

图片引用于百度简介:是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。优点:降低了类的复杂度,将一对多转化成了一对一缺点:中介者会庞大,变得复杂难以维护例子背景:现有某人想买某物,通过中介去买中介模式代码:抽象people类:#pragma once#include <string>#include <iostream>using namespace std;class Medi.

2022-04-19 09:22:14 146

原创 C++25设计模式之访问者模式

图片引用于百度简介:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。优点:符合单一职责原则,很好的扩展性和灵活性缺点:具体元素对访问者公布细节,违反了迪米特原则,具体元素变更比较困难例子背景:现有小米商店和电脑商店,模拟顾客访问行为访问者模式代码:抽象商店类:#pragma once#include <vector>#include <string>#include <iostream>u.

2022-04-19 09:22:07 212

原创 C++25设计模式之状态模式

图片引用于百度简介:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。优点:将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为,可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数缺点:状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码例子背景:模拟线上的信息提交到审核结束状态模式代.

2022-04-17 12:32:08 133

原创 C++25设计模式之备忘录模式

图片引用于百度简介:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,需要时可以将状态恢复优点:给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态缺点:如果保存的数据过多,会造成大量的内存消耗例子背景:Ctrl+z Ctrl+y备忘录模式代码:抽像备忘录类:#pragma once#include <string>#include <iostream>#include <vector>usi.

2022-04-17 12:32:02 364

原创 C++25设计模式之命令模式

图片引用于百度简介:命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开,使请求本身成为一个对象,这个对象和其他对象一样可以被存储和传递优点:降低对象之间的耦合度,提高类的灵活度缺点:可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用例子背景:简易的撤销功能命令模式代码:接收者类 :#pragma once#include <string>#include <.

2022-04-17 12:31:48 161

原创 C++25设计模式之责任链模式

图片引用于百度简介:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。优点:简化对象,让对象不需要知道链的结构。增加新的请求处理类很方便。降低耦合度。它将请求的发送者和接收者解耦缺点:不能保证请求一定被接收,在进行代码调试时不太方便,可能会造成循环调用例子背景:张三想要报销,而每个管理者保险额度不同,需要一级一级往上交,这里我们只处理张三的请求责任链模式代码:管理者类:#pragma once#inclu.

2022-04-17 12:31:41 264

原创 C++25设计模式之迭代器模式

图片引用于百度简介:提供一种方法顺序访问一个聚合对象中的各种元素优点:访问一个聚合对象的内容,不会暴露对象的内部表示,甚至可以自定义迭代器的子类以支持新的遍历缺点:增加了类的个数,这在一定程度上增加了系统的复杂性例子背景:遍历一个数组迭代器模式代码:抽象迭代类:#pragma oncetemplate <typename T>class Iterator{public: Iterator() = default; virtual ~I.

2022-04-17 12:31:28 154

原创 C++25设计模式之观察者模式

图片引用于百度简介:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。优点:建立一套触发机制,解除了主题和被观察者之间的耦合关系缺点:如果观察者中包含了很多的被观察者,逐个通知会花费一些时间。观察者和被观察者有循环依赖的话,会造成死循环。观察者模式不会告诉被观察者是怎么发生变化的,被观察者仅仅知道发生了变化例子背景:某游戏有个8人对战房间,当某人被淘汰时需要通知到其他玩家观察者模式代码:被观察者抽象类:#pragma once#inclu.

2022-04-17 12:31:21 353

原创 C++25设计模式之模版方法模式

图片引用于百度简介:定义一个操作中的骨架,而计算的一些步骤下放到子类中,以保证子类在不影响结构的前提下改变算法的某些特定步骤优点:封装了某些不变的步骤,便于代码复用,扩展时只需改变变化的步骤,不影响原有代码,符合开闭原则缺点:对每一个不同的操作都要实现一个子类,导致类的数量增加,设计也更抽象,大大提高了代码阅读难度例子背景:这里使用桥接模式的代码实现模板方法模式代码:抽象平台类:#pragma once#include "Goods.h"class ECommercePlatfor.

2022-04-17 12:31:08 71

原创 C++25设计模式之策略模式

图片引用于百度简介:指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法优点:新增一个算法逻辑仅需要继承一个处理类即可,不会改动原有的代码,符合开闭原则缺点:算法类会累计的越来越多,并且要全部开放给外部例子背景:现有一个数组需要排序,而排序算法样式多。使用策略模式实现它策略模式代码:抽象算法类:#pragma onceclass StrategySort{public: StrategySort() = default; virtual ~.

2022-04-17 12:30:59 171

原创 C++25设计模式之享元模式

图片引用于百度简介:主要用于减少创建对象的数量,以减少内存占用和提高性能。优点:大大的减少了对象的创建,如果对象调用率高,能极大的减少内存占用缺点:为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性例子背景:现在有个商店,批发商要过来问有没有这个商品,没有我就创建一个给他,有就直接给他享元模式代码:抽象商店类:#pragma once#include <string>#include <iostream>using namespace .

2022-04-17 12:30:43 154

原创 C++25设计模式之组合模式

图片引用于百度简介:将对象组合成树形结构以表示部分-整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性优点:可以一致的处理子对象和组合对象,简化客户端代码,能够更加轻松的加入新的子对象,不会因为加入了新的子对象就修改其他对象代码,符合开闭原则缺点:设计难,要花很多时间理清层次关系例子背景:现在有一个窗口类,窗口类可以继续添加按钮、文本等子类,而子类不可以再继续添加子类组合模式代码:抽象基类:#pragma once#include <string>#includ.

2022-04-17 12:30:35 245

原创 C++25设计模式之桥接模式

图片引用于百度简介:将抽象部分与实现部分分离,使它们都可以独立的变化。优点:各个对象之间都不会产生影响,无论是抽象变化还是实现变化,只需要对它扩展即可,高层代码无需任何更改就可以接收扩展后续的类缺点:由于聚合关联关系建立在抽象层,开发者需要进行抽象设计与编程,会增加系统的理解与设计难度例子背景:现有商家想上架到某平台卖货,而平台会有年费,我们用桥接模式实现它桥接模式代码:抽象商家类:#pragma once#include <string>#include <ios.

2022-04-16 17:57:57 217

原创 C++25设计模式之外观模式

图片引用于百度简介:隐藏系统的复杂性,向外部提供一个可以访问的接口,即单实例类优点:降低了客户端与子系统的耦合关系,让子类更加易用,外部只需要和外观类交互缺点:增加子类可能会修改外观类,不符合开闭原则,而且不能很好的限制外部使用子类例子背景:现在有人想要买一台主机,借用上一个代理模式的代码,用外观类实现人购买电脑的操作外观模式代码:外观类:#pragma once#include "Producti7Mainframe.h"#include "../Proxy/Proxy.h"c.

2022-04-16 17:57:39 215

原创 C++25设计模式之代理模式

图片引用于百度简介:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介优点:代理模式将客户端与目标对象分离,增加了程序的可扩展性缺点:代理模式会造成系统设计中类的数量增加,效率降低例子背景:现在有人想买电脑,但是电脑的配置不同,不知道他钱够不够,vip能88折,这里借用装饰者模式的代码作为产品概念:把它比作房子中介,他介于顾客和包租公之间,处理一切事物代理模式代码:人类:#pragma onc.

2022-04-16 17:57:19 743

原创 C++25设计模式之装饰者模式

图片引用于百度简介:装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性地替代方案。。优点:能够动态的将新功能加在对象上,相比继承更加弹性缺点:使用装饰模式会产生比继承更多的对象,查错比较困难例子背景:现在需要组装一台电脑主机,而主机的各个部件都不相同,我们需要根据不同的主机构建不同的部件,然后组装它概念:动态给对象增加功能,从一个对象的外部来给对象添加功能,当使用装饰后,从外部系统的角度看,就不再是原来的那个对象了,而是使用一系列的装饰器装饰过后的对象装饰者模式代码:.

2022-04-16 17:57:00 209

原创 C++25设计模式之适配器模式

图片引用于菜鸟教程简介:把某个类的接口通过适配器类引用到是适配类里从而实现兼容优点:解决目标接口和适配类接口不一致的问题,提高了类的复用性缺点:降低了代码的阅读性,过多的适配器类会导致系统代码凌乱例子背景:现在有2个类,一个类的接口为ShowWithAdd,一个类为printAdd,现在需要他俩兼容,于是使用了适配器适配器模式代码:目标类:#pragma once#include <iostream>#include <string>using namesp.

2022-04-16 17:56:33 256

原创 C++25设计模式之原型模式

图片引用于百度简介:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。优点:可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可辅助实现撤销操作。缺点:需要为每一个类都配置一个 clone 方法,clone 方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违背了开闭原则。例子背景:现在有一个保存文本的类,我需要克.

2022-04-16 17:56:11 383

原创 C++25设计模式之建造者模式

图片引用于百度简介:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。优点:封装性好,构建和表示分离。扩展性好,各个具体的建造者相互独立。客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险缺点:产品的组成部分必须相同,这限制了其使用范围。例子背景:现在需要组装一台电脑主机,而主机的各个部件都不相同,我们需要根据不同的主机构建不同的部件,然后组装它概念:它是将一个复杂的对象分解为多个简.

2022-04-16 17:55:46 238

原创 C++25设计模式之单实例模式

图片引用于C语言中文网简介:单实例模式是为了创建一个整个实例唯一的类,这样做可以避免资源浪费,还可以将某些需要全局使用的内容在各个地方使用和修改优点:减少了内存的开销,可以避免对资源的多重占用,优化和共享资源的访问。缺点:单实例一般没有接口,扩展困难,要修改必须修改类,违背开闭原则,功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。(而且很容易被破解掉。。。)例子背景:软件拥有注册功能,各个地方都需要检测是否注册,从而显示不同的功能概念:单例类只有一个实例对象并且单例对象必.

2022-04-16 17:55:25 525

原创 C++25设计模式之抽象工厂模式

图片引用于菜鸟教程简介:抽象工厂模式是为了创建一系列产品而提供的解决方案,和简单工厂模式不一样的是,抽象工厂模式不只是创建一种产品,而是创建产品的一系列对象优点:扩展性高,可以通过一系列对象实现某个功能缺点:一旦添加新产品,就需要再新增一个工厂类适用场景:需要一系列或者多个对象实现不同功能又不关心功能怎么实现时例子背景:现在客户需要i3、i5、i7、i9、DIY电脑主机,而这些主机各方面组件并不相同,那么使用抽象工厂模式,在为各种主机组装时就无需制定配件的型号,它会自动根据产品自动生成需要的配件.

2022-04-16 17:54:58 761

原创 C++25设计模式之简单工厂模式

简介:简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开,不需要关心对象怎么创建的,只需要知道要用的对象名或者枚举名即可。优点:调用者想创建一个对象,只需要知其名缺点:违背开闭原则,一旦添加新产品,就必须修改工厂类,并且工厂类集中了所有产品的创建,一旦出错整个项目都会受影响适用场景:工厂类需要创建的对象少,不会给工厂类增加太大负担,使用者不关心对象的创建例子背景:现在客户需要i3和i5电脑主机,而两种主机各方面属性并不相同,所以现在工厂有2个系列的产品,i3和i5的主机概念

2022-04-16 17:54:23 391

原创 vs2019编译7zip format7z

vs2019编译7zip format7z第一种方式第二种方式第一种方式0x01. 进入7zsource\cpp目录 把Build.mak只读去掉0x02. 把在第40行附近 LFLAGS = $(LFLAGS) -OPT:NOWIN98 后面的-OPT:NOWIN98去掉0x03. 打开vs命令提示符工具 cd到7zsource\cpp\7zip目录0x04. 执行 nmake NEW_COMPILER=1 MY_STATIC_LINK=10x05. 等待编译完成即可第二种方式0x01.

2021-12-02 14:18:22 611

空空如也

空空如也

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

TA关注的人

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