自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 现代C++模板第九章 待决名

我们省略了很多的规则,这很正常,着重聊了几个重点,这足够各位的使用,如果还有需求,查阅文档。

2026-01-08 09:10:16 977

原创 现代C++模板第八章 折叠表达式

省略了一些,但这一节整体我写的较为满意,规则和重点都聊的很清楚,其他的任何形式,无非都是以上的去雕花罢了。我们可以布置一个课后作业,说出以下代码使用的折叠表达式语法,以及它的效果,详细解析,使用 Markdown 语法。return res;提交到 homework文件夹中的08折叠表达式作业文件夹中(如果没有就创建),然后新建文件(命名需要是有意义的),写好后提交 pr。homework。

2026-01-08 09:08:56 821

原创 现代C++模板第七章 导出动态库或静态库

我们没有讲述诸如:项目如何配置,怎么配置项目生成动态库、静态库,这也不是我们的重点。在视频中我们会从头构建这些。但是文本的话,不必要从头教学这些基本知识。我们关注代码上即可。静态库也没有单独提,因为的确没啥区别。另外如果你直接打开我们的项目,无法编译或许很正常,请自己根据当前环境,处理编码问题,以及生成动态静态库,配置,使用。测试动态库使用测试静态库使用用模板生成动态库用模板生成静态库。

2026-01-08 08:57:17 257

原创 现代C++模板第六章 模板分文件

如你所见,解决分文件问题很简单,显式实例化就完事了。再次我们再重复强调一些概念:模板必须实例化才能使用,实例化就会生成实际代码;有隐式实例化和显式实例化,我们平时粗略的说的“模板只有使用了才会生成实际代码”,其实是指使用模板的时候,就会隐式实例化,生成实际代码。分文件自然没有隐式实例化了,那我们就得显式实例化,让模板生成我们想要的代码。模板全特化有类似模板显式实例化的作用,不过我们一般知道这件事情即可。main.cpp。

2026-01-08 08:56:51 609

原创 现代C++模板第五章 模板偏特化

我们在一开始的模板全特化花了很多时间讲解各种情况和细节,偏特化除了那个语法上,其他的各种形式并无区别,就不再介绍了。本节我们给出了三个示例,也是最常见最基础的情况。我们要懂得变通,可能还有以此为基础的各种形式。值得注意的是,模板偏特化还可以和SFINAE1一起使用,这会在我们后续的章节进行讲解,不用着急。如还有需求,查看。函数模板没有偏特化,只有类模板和变量模板可以。注:模板代换失败不是错误;在后续章节有详细讲解。↩︎。

2026-01-07 16:54:39 609

原创 现代C++模板第四章 模板全特化

我们省略了一些内容,但是以上在我看来也完全足够各位学习使用了。如有需求,查看。模板全特化的语法主要核心在于template<>,以及你需要注意,你到底要写几个template<>。其他的都很简单。无法通过编译。

2026-01-07 16:29:34 605

原创 现代C++模板第三章 变量模版

T v;就这么简单,毫无难度。当然了,既然是变量,自然可以有各种的修饰,比如 cv 限定,比如constexpr,当然也可以有初始化器,比如{}= xxx。变量模板其实很常见,在 C++17,所有元编程库的类型特征均添加了_v的版本,就是使用的变量模板,比如等;我们在后面会详细讲解。如果学到这里了,如果你注意到,函数模板、类模板、变量模板,很多语法是共通的,是越学越简单,代表你思考了。后续还有很多内容是一起的,比如模板偏特化、全特化、显式实例化等。

2026-01-07 14:44:18 347

原创 现代C++模板第二章 类模板

下面是一个类模板,它和普通类的区别只是多了一个template < 形参列表 > 类声明几乎所有我们前面讲的,函数模板中形参列表能写的东西,类模板都可以。同样的,我们的类模板一样可以用class引入类型形参名,一样不能用structprivate:T t;Test t(1);// t 是 Test<size_t>如果要类模板Test推导为指针类型,就变成数组呢?Test t(p);// t 是 Test<char[]>模板名称(类型a)->模板名称<想要让类型a被推导为的类型>

2026-01-07 14:35:17 1015

原创 现代C++模板第一章 函数模板

a : b;这应该很简单,即使我们还没有开始讲述函数模板的语法。template < 形参列表 > 函数声明而max函数模板中的形参列表是typename T,关键字 typename 顾名思义,引入了一个类型形参。类型形参名是T,也可以使用其它标识符作为类型形参名(T或Ty等,是约定的惯例),你也可以在需要的时候自定义一些有明确意义的名字。在调用函数模板max时,根据传入参数,编译器可以推导出类型形参的类型,实例化函数模板。我们需要传入支持函数模板操作的类型,如 int 或 重载了运算符的类。

2026-01-07 13:31:57 943

原创 Design Patterns In Modern C++ 中文版翻译 第二十四章 访问者模式

每当人们谈论访问者模式时,就会提到分派(dispatch)这个词。它是什么?简单地说,分派就是确定具体要调用哪个函数,为了进行分派需要多少条信息。现在,如果我创建一个普通的Foo对象,那么调用它的func()就没有问题了func(foo);// ok现在,让我们从多态的角度来考虑这个问题:有没有办法强制系统调用正确的重载函数,而不需要任何运行时检查(比如和类似的方法)。的确存在这种方法。看,当你在一个Stuff上调用某个方法时,这个调用可以是多态的(多亏了虚函数表),它可以被分派到必要的组件。

2026-01-05 13:51:48 932

原创 Design Patterns In Modern C++ 中文版翻译 第二十三章 模板方法

与使用组合并分为静态和动态的策略模式不同,模板方法使用继承,因此,它只能是静态的,因为一旦对象被构造,就没有办法操纵它的继承特性模板方法中唯一的设计决策是,你想让模板方法使用的方法是纯虚的,还是实际上有一个主体(即使该主体是空的)。如果你预见到一些方法对所有的继承者来说都是不必要的,那就把它们变成无操作的方法。

2026-01-05 13:51:36 280

原创 Design Patterns In Modern C++ 中文版翻译 第二十二章 策略模式

假设您决定使用包含多个字符串的数组或向量,并将它们作为列表输出 。如果考虑不同的输出格式,您可能知道需要获取每个元素,并将其与一些额外的标记一起输出。但对于HTML或LaTeX这样的语言,列表还需要开始和结束标记或标记。这两种格式中的任何一种对列表的处理都是相似的(需要输出每个条目)和不同的(条目的输出方式)。这些都可以用一个单独的策略来处理。我们可以制定一个渲染列表的策略:可以针对不同的输出格式制定不同的策略,然后将这些策略输入一个通用的、不变的算法来生成文本。这是另一种存在于动态(运行时可替换)和静态(

2026-01-05 13:51:12 855

原创 Design Patterns In Modern C++ 中文版翻译 第二十一章 状态模式

首先,这是值得强调的Boost.MSM是Boost中两种状态机实现之一,另一种是。我很确定还有很多其他的状态机实现。其次,状态机的功能远不止这些。例如,许多库支持分层状态机的思想:例如,一个生病(Sick)的状态可以包含许多不同的子状态,如流感(Flu)或水痘(Chickenpox)。如果你在处于感染流感的状态,你也同时处于生病的状态。最后,有必要再次强调现代状态机与状态设计模式的原始形式之间的差异。重复api的存在(例如)以及自删除的存在在我的书中是明确的代码气味。

2025-12-30 17:21:42 912

原创 Design Patterns In Modern C++ 中文版翻译 第二十章 观察者模式

毫无疑问,本章中提供的代码是一个明显的例子,它过度思考和过度设计了一个超出大多数人想要实现的问题的方式。让我们回顾一下实现 Observer 时的主要设计决策:决定你希望你的 observable 传达什么信息。例如,如果你正在处理字段/属性更改,则可以包含属性名称。你还可以指定旧/新值,但传递类型可能会出现问题。你想让你的观察者成为tire class,还是你只需要一个虚函数列表?你想如何处理取消订阅的观察者?

2025-12-30 17:21:12 596

原创 Design Patterns In Modern C++ 中文版翻译 第十九章 空对象

空对象模式提出了一个API设计的问题:我们可以对我们所依赖的对象做什么样的假设?如果我们取一个指针(裸指针或智能指针),那么是否有义务在每次使用时检查该指针?如果你觉得没有这种义务,那么用户实现空对象的唯一方法是构造所需接口的无操作实现,并将该实例传递进来。也就是说,这只适用于函数:例如,如果对象的字段也被使用,那么你就遇到了真正的麻烦。如果你想主动支持空对象作为参数传递的想法,你需要明确:要么指定参数类型为。

2025-12-30 17:20:56 499

原创 Design Patterns In Modern C++ 中文版翻译 第十八章 备忘录模式

在前面的例子中,它是void的,而现在,deposit()将返回一个Memento。此外,我们使用当前字段作为进入更改列表的“指针”,如果我们决定撤消并后退一步,我们总是可以redo和恢复到我们之前的状态。此外,当我们恢复一个memento时,我们实际上是将该memento推入更改列表,以使得一个undo操作能够正确地执行。同样,我们需要能够执行一些redo:如果可以,我们可以安全地redo,如果不行,我们什么都不做,并返回一个空指针。如果我们要存储每一个由银行帐户产生的Memento,该怎么办呢?

2025-12-30 17:20:35 427

原创 Design Patterns In Modern C++ 中文版翻译 第十七章 中介者模式

中介者设计模式本质上是提议引入一个中间组件,系统中的每个人都可以引用该组件并可以使用它来相互通信。可以通过标识符(用户名、唯一 ID 等)代替直接内存地址进行通信。中介者的最简单实现是一个成员列表和一个函数,它遍历列表并执行预期的操作——无论是列表中的每个元素还是有选择的。中介者的一个更复杂的实现可以使用事件来允许参与者订阅(和取消订阅)系统中发生的事情。这样,从一个组件发送到另一个组件的消息可以被视为事件。在这种设置中,如果参与者不再对某些事件感兴趣或即将完全离开系统,他们也很容易取消订阅某些事件。

2025-12-30 17:20:12 880

原创 Design Patterns In Modern C++ 中文版翻译 第十六章 迭代器

迭代器设计模式在c++中无处不在,有显式的也有隐式的(例如基于范围的)形式。不同类型的迭代器可以用于迭代不同的对象:例如,反向迭代器可以应用于vector,但不能应用于单链表。实现自己的迭代器就像提供++和!操作符一样简单。大多数迭代器都是简单的指针的外观(façades),在它们被丢弃之前,用于遍历集合一次。协程修复了迭代器中出现的一些问题:它们允许在调用之间保持状态,这是其他语言(如c#)很久以前就实现了的。因此,协程允许我们编写递归算法。

2025-12-29 09:27:47 618

原创 Design Patterns In Modern C++ 中文版翻译 第十五章 解释器模式

首先,需要说明的是,相对而言,解释器设计模式是不常见的,构建解析器的挑战现在被认为是不必要的,这就是为什么我看到许多英国大学(包括我自己的大学)的计算机科学课程中删除了它。此外,除非您计划从事语言设计工作,或者制作静态代码分析工具,否则您不太可能在高需求中找到构建解析器的技能。也就是说,解释的挑战是计算机科学中一个完全独立的领域,设计模式的书中的一个章节不能合理地解释它。如果你对这个主题感兴趣,我建议你看看Lex/YaccANTLR和其他许多专门针对构造的框架。我还建议为流行的IDE。

2025-12-29 09:26:03 938

原创 Design Patterns In Modern C++ 中文版翻译 第十四章 命令模式

命令设计模式很简单:它的基本建议是,对象可以使用封装指令的特殊对象彼此通信,而不是将这些相同的指令指定为方法的参数。有时,您不希望这样的对象改变目标或使它做一些特定的事情;相反,您希望使用这样的对象从目标查询一个值,在这种情况下,我们通常将这样的对象称为查询。虽然在大多数情况下,查询是一个依赖于方法返回类型的不可变对象,但在某些情况下(例如,参见Chain of Responsibility Broker Chain的例子;)当你希望被返回的结果被其他组件修改时。但是组件本身仍然没有修改,只是结果是。

2025-12-29 09:25:15 865

原创 Design Patterns In Modern C++ 中文版翻译 第十三章 责任链

责任链是一种非常简单的设计模式,它允许组件依次处理命令(或查询)。CoR最简单的实现是创建一个指针链,从理论上讲,可以用一个普通的vector替换它,或者,如果希望快速删除,也可以用一个list。更复杂的代理链实现还利用中介模式和观察者模式允许我们处理查询事件(信号),在最终的值返回给客户端之前,让每个订阅者对最初传递的对象(它是贯穿整个链的单个引用)执行修改。

2025-12-29 09:23:17 624

原创 Design Patterns In Modern C++ 中文版翻译 第十二章 代理

本章介绍了一些代理。与装饰器模式不同,代理不会尝试通过添加新成员来扩展对象的功能(除非它无能为力)。它试图做的只是增强现有成员的潜在行为。属性代理是替代对象,可以在分配和/或访问期间替换字段并执行附加操作。虚拟代理提供对底层对象的虚拟访问,并且可以实现延迟对象加载等行为。你可能觉得你正在处理一个真实的对象,但底层实现可能尚未创建,例如,可以按需加载。通信代理允许我们更改对象的物理位置(例如,将其移动到云端),但允许我们使用几乎相同的API。当然,在这种情况下,API。

2025-12-29 09:22:54 940

原创 Design Patterns In Modern C++ 中文版翻译 第十一章 享元模式

享元模式是一种节约空间的技术。它存在许多确切的变体:有时,享元作为APItoken返回,允许你执行修改;而在其他时候,享元是隐式的,隐藏在场景后面—就像我们的User一样,客户端并不打算知道实际使用的享元。

2025-12-26 15:59:50 856

原创 Design Patterns In Modern C++ 中文版翻译 第十章 外观模式

外观设计模式是一种将简单接口放在一个或多个复杂子系统前面的方法。在我们的例子中,可以直接使用涉及许多缓冲区和视窗的复杂设置,或者,如果你只想要一个带有单个缓冲区和相关视视窗的简单控制台,你可以通过一个非常容易访问和直观的API获得它。

2025-12-26 15:57:11 607

原创 Design Patterns In Modern C++ 中文版翻译 第九章 装饰器

在遵循开闭原则(OCP)的同时,装饰器为类提供了额外的功能。它的特点是可组合性:几个装饰器可以以任何顺序应用到一个对象上。动态装饰器可以存储修饰对象的引用(甚至存储整个值,如果你想的话!),并提供动态(运行时)可组合性,但代价是不能访问底层对象自己的成员。静态装饰器使用mixin继承(从模板参数继承)在编译时组合装饰器。这失去了任何类型的运行时灵活性(您不能重新组合对象),但允许你访问底层对象的成员。这些对象也可以通过构造函数转发完全初始化。函数装饰器可以包装代码块或特定的函数,以允许 行为的组合。

2025-12-26 15:54:40 1100

原创 Design Patterns In Modern C++ 中文版翻译 第八章 组合

复合设计模式允许我们为单个对象和对象集合提供相同的接口。这可以通过显式使用接口成员来完成,也可以通过duck typing(在程序设计中是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定)来完成。例如基于范围的for循环并不需要您继承任何东西,而是通过实现begin()和end()。正是这些begin()/end()成员允许标量类型伪装成“集合”。

2025-12-26 13:57:01 1077

原创 Design Patterns In Modern C++ 中文版翻译 第七章 桥接模式

桥是一个相当简单的概念,作为一个连接器或胶水,连接两个部分在一起。抽象(接口)的使用允许组件在不真正了解具体实现的情况下相互交互。也就是说,桥接模式的参与者确实需要知道彼此的存在。具体来说,一个Circle需要一个对Renderer引用,相反,渲染器知道如何具体地绘制圆(成员函数的名称)。这可以与中介模式形成对比,中介模式允许对象在不直接感知对方的情况下进行通信。

2025-12-26 13:52:52 786

原创 Design Patterns In Modern C++ 中文版翻译 第五章 单例

单例并非完全邪恶,但如果使用不慎,它们会破坏应用程序的可测试性和可重构性。如果你确实必须使用单例,请尝试避免直接使用它(例如,编写),而是继续将其指定为依赖项(例如,构造函数参数),从应用程序中的单个位置满足所有依赖项(例如,控制容器的反转)

2025-12-19 17:13:43 1021

原创 Design Patterns In Modern C++ 中文版翻译 第六章 适配器

适配器是一个非常简单的概念:它允许你调整所拥有的接口以适应所需要的接口。适配器的唯一实际问题是,在适应过程中,有时需要生成临时数据,以满足数据的其他表示形式。当这种情况发生时,请使用缓存:确保只在必要时才生成新数据。哦,如果你想在缓存的对象发生变化时清理过时数据,那么你还需要做更多的工作。我们还没有真正解决的另一个问题是延迟加载:当前适配器实现一创建就执行转换。如果你只想在实际使用适配器时完成工作,该怎么办?这很容易做到,留给读者作为练习。

2025-12-19 17:13:24 613

原创 Design Patterns In Modern C++ 中文版翻译 第四章 原型

原型设计模式阐释了对象深度拷贝的概念,并不需要每次都通过构造函数完整初始化来创建一个对象,可以对创建好的对象进行复制,复制产生的对象和原来的对象互不依赖,稍加修改后就能得到想要的新对象。在代码中正确的复制对象,即进行深拷贝。可以在拷贝构造函数/拷贝赋值运算符或单独的成员函数中实现。在代码中支持序列化/反序列化,序列化后再进行反序列化实现拷贝。该方法需要额外的计算开销,拷贝频率越高,开销越大。该方法相对于拷贝构造函数的唯一优点是能复用已有的序列化代码。

2025-12-18 11:09:30 772

原创 Design Patterns In Modern C++ 中文版翻译 第三章 工厂

工厂方法(factory method)是类的成员函数,可以作为创建对象的一种方式,通常用来替代构造函数。工厂(factory)通常是知道如何创建对象的独立的类,尽管如果你传递构造对象的函数(std::function,函数指针或者函数对象)到某个函数里面,这个参数通常也被称为工厂。抽象工厂(abstract factory),顾名思义,是一个抽象类,可以被生产一系列对象的具体类所继承。抽象工厂在实际中很少见。

2025-12-18 09:27:47 642

原创 Design Patterns In Modern C++ 中文版翻译 第二章 建造者模式

建造者模式的目标是定义一个完全用于分段构造复杂对象或一组对象的组件。建造者可以拥有流畅的接口,可用于使用单个调用链进行复杂的构造。为了支持这个,构造函数应该返回this或*this。为了强制API的用户使用一个构造器,我们可以使目标对象的构造器不可访问,然后定义一个静态的create()函数来返回这个构造器。通过定义适当的操作符,可以将构造器强制转换为对象本身。多亏了统一的初始化器语法,groovy风格的建造者在c++中是可能的。这种方法非常普遍,并且允许创建不同的领域特定语言(DSLs)。

2025-12-17 16:45:53 1027

原创 Design Patterns In Modern C++ 中文版翻译 第一章

摘要: 本文介绍了C++设计模式的基本原则和SOLID设计原则。首先指出设计模式在C++中的重要性,尽管现代语言已内置部分模式。随后详细阐述了SOLID原则: 单一职责原则(SRP):每个类只负责一个功能 开闭原则(OCP):对扩展开放,对修改关闭 里氏替换原则(LSP):子类应可替换父类而不破坏程序 接口隔离原则(ISP):避免"臃肿"接口,应拆分细化 依赖反转原则(DIP):高层模块不应依赖低层模块,都应依赖抽象 文中通过具体代码示例说明如何应用这些原则,如使用规范模式实现OCP,讨

2025-12-17 15:40:59 703

原创 VMware虚拟机安装麒麟系统

VMwareWorkstation安装地址](http://down.dxiazaicc.com/pcsoft/VMwareWorkstation.zip)[官网:https://www.kylinos.cn/](https://www.kylinos.cn/)进入后选择:桌面操作系统->申请试用->填写资料->银河麒麟桌面操作系统V10->AMD64版 进行下载。安装完成后打开虚拟机,然后进行安装系统。下载麒麟桌面V10操作系统。

2024-05-27 16:08:45 4756

原创 Linux Qt6.4.2版本安装

然后一直下一步等待安装完成即可。

2024-05-24 09:03:33 551 1

原创 Unity3D 安装

Unity3D 安装

2022-10-10 15:26:19 1256

原创 DirectX 12 3D游戏开发实战 (第二章 矩阵代数)

DirectX 12 3D游戏开发实战 (第二章 矩阵代数)

2022-09-21 17:42:22 1594

原创 DirectX 12 3D游戏开发实战(第一章向量)

DirectX 12 3D游戏开发实战(第一章向量)

2022-09-19 17:59:16 2338

原创 DirectX 12 3D游戏开发实战(目录)

DirectX 12 3D游戏开发

2022-09-19 11:30:30 2370

原创 NTSTATUS 状态码

NTSTATUS 状态码

2022-09-14 10:59:01 4951

windows下安装arm系统(麒麟)QEMU-EFI.fd引导文件

windows下安装arm系统(麒麟)QEMU-EFI.fd引导文件

2024-12-27

DirectX 12 3D 游戏开发实战源码

DirectX 12 3D 游戏开发实战

2022-09-19

驱动开发工具,里面包含Dbgview和驱动安装卸载工具

驱动开发工具,里面包含Dbgview和驱动安装卸载工具

2022-08-15

stm32f4 全部实例资源

里面有stm32f4的全部资源 只是寄存器版本的 里面有stm32f4的全部资源 只是寄存器版本的

2018-07-08

VA_X_Setup2440_0.exe

Visual Assist X 2021.5 支持vs2022

2021-12-09

Visual Assist X 破解.zip

Visual Assist X 小番茄破解工具,包括2019破解。

2019-07-02

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

TA关注的人

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