C++
zyq1122334455
这个作者很懒,什么都没留下…
展开
-
插件Undo/Redo两种方式封装使用
在做插件开发时,插件本身的操作要和框架进行交互,一般由插件自身去记录修改的内容,让后将每一次的操作标识指针交给框架,在适当的时候进行触发处理。下面给出大致的伪代码和原理。一.将单个操作和一组操作一并进行注册下面给出基本的演示代码如下:enum struct UndoItemType{ kUndoItemTypeSigle, kUndoItemTypeMutil};class IUndoItem {public: virtual ~IUndoItem() {}原创 2021-09-15 18:49:28 · 329 阅读 · 0 评论 -
关于inline的使用记录
使用记录:在一个全局的头文件中对一个函数进行了实现,然后在其他多个.cpp中去使用这个类,那么编译会存在已经存在实现在.obj中,这时考虑使用inline关键字。(注意:inline函数本身是有汇编代码地址的,但是被其它cpp编译后是找不到该函数名地址的,相当于函数表中是没有的)源文件中没有使用inline关键字修饰的函数,inline函数代码块是没有的,inline函数函数地址是没有的;而对于一般的函数,尽管是函数没有被调用,也可以看到函数地址; 下面给出简单的使用例子:typedef i原创 2021-08-10 00:00:49 · 203 阅读 · 0 评论 -
封装C++内存优化管理器,提升性能记录
临时保存原创 2021-08-21 00:59:12 · 271 阅读 · 0 评论 -
树节点逻辑关系记录及节点查找功能(二)
对前面的文章:数据结构树节点深度和广度关系递归记录进行了延伸,下面给出演示代码: typedef struct NODEINFO { NODEINFO() { pParent = nullptr; pBefore = nullptr; pAfter = nullptr; pChild = nullptr; } NODEINFO(FPD_Ob原创 2021-07-04 22:13:43 · 192 阅读 · 0 评论 -
c++智能指针自定义删除器和封装成C接口举例
在开发过程中,我们可能会经常使用第三方的库和接口来不断地New对象,这时我们要考虑,使用智能指针来管理我们的对象,不然函数中有大量的Return,就需要我们去释放分配的对象,维护起来也比较manfan...原创 2021-06-13 04:23:47 · 743 阅读 · 2 评论 -
数据结构树节点深度和广度关系递归记录
在树结构中,一般有GetChild和GetNextSibing的函数提供给我们使用,通过这两个接口和递归能够遍历得到树的所有的节点的信息。而在某些开发情况下,原创 2021-06-10 16:25:51 · 176 阅读 · 0 评论 -
C++对象内容比较和指针比较
使用容器存储的时候,一定要注意里面存储的是对象和还是对象的指针,这两者是有区别的。如果是对象的对话,在进行一个删除、查找Find的时候,会调用类的比较==运算符,而如果是指针的话,则会判断sh...原创 2021-06-03 15:28:13 · 469 阅读 · 0 评论 -
c++禁止子类拷贝构造和赋值操作
在日常开发某些场景下,不允许一些类对象的拷贝构造和赋值操作,这时可以考虑将这些类从一个对拷贝和赋值做限定的父类继承即可,给出简略的演示代码:class CUncopyable{protected: CUncopyable() {} ~CUncopyable() {}public: CUncopyable(const CUncopyable&) {} CUncopyable& operator=(const CUncopyable&)原创 2021-06-01 15:08:32 · 588 阅读 · 0 评论 -
基于PluginSDK的模块下沉和回调函数封装设计
一、Plugin SDK模块下沉的两种设计在大型项目中,框架通常是支持插件加载和插件开发的,这样有助于提升程序的效率和完成更多的第三方的开发需求;因此,在实际场景中,也经常会出现对已有的模块进行下沉,下面给出了两种常用的设计:1)已有Module基于Core层的封装这样情况是工程中的Module都基于Core lib 进行封装,封装成PluginSDK 所支持的形式;数据层Module中用的参数,返回值都是Core层所提供的;2)已有Module基于现有PluginSDK层的封装原创 2021-05-17 23:58:08 · 340 阅读 · 1 评论 -
VS2107中库或者插件的配置
这里做一个简单的记录,将我们的主程序编译成Debug的模式。在我们的每一个VS工程中会存在一个.user的配置文件这里记录着工程的设置;现在假设我们需要调试一个插件的话,打开工程的属性设置:注意一定要配置正确;这时在本地文件设置中会出现如下增加内容:自己添加的配置都放在了这里;...原创 2021-05-12 10:33:02 · 125 阅读 · 0 评论 -
编程之美(二):Lamda匿名回调函数配合模板来实现代码最大复用
在我们平时项目中,一定会出现这种情况:大量的操作开始和结束的处理是一致的,比如一些打开显示、关闭消除的操作(如我们在编辑修改一个文件),而在中间要传入不同的实现体,还比如一些对资源的访问请求、结束时的关闭断开等;还比如对一个界面控件的处理,其它的诸如任务栏、状态栏、进度条、Undo/Redo处理的逻辑大致都是一样的,现在不可能分别的写出每一个操作的函数那么就要考虑采用一种模板封装的方法如下:#pragma once#include <iostream>name...原创 2021-04-26 10:48:03 · 133 阅读 · 0 评论 -
链表的基本操作封装
下面为单链表的基本操作:#include <iostream>using namespace std;struct NODE{ int data; NODE*pNext; NODE(int value) { data=value; pNext=NULL; }};class List{public: List() { m_head=NULL; count=0; } ~List(); void insert(NODE*原创 2021-02-27 17:23:11 · 228 阅读 · 0 评论 -
编程之美:回调函数的两种传递记录方式差异及使用场景分析
一、前言 回调函数能够以高效的事件响应速度和灵活的模块解耦能力实现功能,而深受大家的钟爱。合理而又正确的使用将会为我们的程序增加加彩。废话不多说,下面就笔者经常遇到和使用的两种场景进行阐述,以此来给大家打来一些帮助和启发。...原创 2021-01-18 20:30:44 · 130 阅读 · 0 评论 -
架构深造:一种抽象文档解析、显示、编辑修改MVC模式及跨平台工具设计总结
目录一背景说明大家平时在学习工作过程中,一定会遇到各式各样的抽象编辑文档,如办公的Excel,word,ppt,或者保持同一显示效果的PDF文档,亦或是工业绘图的cad、电路绘图Altium Designer等等林林种种。这里做一个小小的剖析,希望能给大家的软件设计或者是编程思想起到一定的帮助与提升。二流程简介三总结...原创 2020-12-31 14:21:39 · 208 阅读 · 1 评论 -
c++私有继承探索与分析
引言私有继承在实际使用过程中不多,主要是因为使用共有继承能够很好的支持对象的原有特性,即在对象外部的系列访问和操作。在某些场合,我们只希望访问父类的方法并对访问做了限制,就可能会使用到私用继承(或者保护继承)。举例通过下面的程序代码来简单的演示私有继承的使用:#include <iostream>class RichMan{public: RichMan() {}; ~RichMan() { std::cout << "RichMan Deconstru原创 2020-11-08 21:40:36 · 125 阅读 · 0 评论 -
编程进阶一:编译器的特殊功能使用及借助编译时完成数据的初始化
一、背景介绍 在我们平常开发模块过程中,尤其是大型工程,会有很多数据、函数类型的申明及初始化,在这个时期(编译期)利用好编译器所支持的语法功能,会给我们的开发带来极大的方便。应将编译器理解成一种帮助我们智能分析、生成、统计的工具和朋友,很多事情可以交给他去完成,而不是手动的去做。作为优秀的编程技术人员,是必须要熟练掌握和正确使用的,并且尽可能了解钻研它所支持的功能!二、使用场景下面将给出几个范例:...原创 2020-10-27 19:11:59 · 239 阅读 · 0 评论 -
C++通过调用基类的纯虚函数间接实现多态
下面演示了通过基类的虚函数,来间接实现多态:#include "stdafx.h"#include<iostream>#include<string>using namespace std;//Test1//class IPerson//{//public:// IPerson() { cout << "this is construction in IPerson" << endl; }// virtual void SetN原创 2020-05-29 17:46:38 · 693 阅读 · 0 评论 -
C++ List的Remove和erase比较
Remove和erase都可以进行数据的移除,区别在于Remove移除的是List中所有与待移除项相等的数据,而erase移除的是迭代器所指的内容。 Remove有一个是否相等的比较,因此我们在Remove自定义的数据时,要添加“==”运算符的重载实现。 下面给出一个简单的演示例子: #include<iostream>#include<iterator>#include <list>using namespace std;#define R..原创 2020-05-09 21:51:08 · 1182 阅读 · 1 评论 -
C++使用类名强制指定调用的函数
#include<iostream>using namespace std;class A{public: void foo() { printf("1\n"); } virtual void fun() { printf("2\n"); }};class B : public A{pub...原创 2019-11-30 16:33:19 · 1562 阅读 · 0 评论