- 博客(67)
- 资源 (5)
- 收藏
- 关注

原创 个人编码习惯——C++(持续更新)
private/protected函数使用小驼峰,如createWindow public函数使用大驼峰,如CreateWindow 时间变量前缀,tmXXX表示time_t类型,ulXXX表示uint64_t类型,uXXX表示uint32_t类型 命名空间无特殊情况统一小写 分层设计时,某一层的门面头文件不可包含另一层的门面头文件,如ui/ui.h不可包含dao/dao.h 代码段推荐注释方法 头文件#ifndef定义方式推荐如下,VS“菜单-工具”自带了GUID生成工具 当无法确定一个函数
2021-11-23 13:46:53
694
2
原创 如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口
在Qt框架中,要实现一个无标题栏、半透明、置顶(悬浮)的窗口,需要一些特定的设置和技巧。废话不多说,下面我将以DrawClient软件为例,介绍一下实现这种效果的四个要点。在窗口的构造函数中设置窗口的样式,在强调一下,一定要找构造函数中设置,否则有些平台可能无效。
2024-02-17 12:36:47
3363
转载 Windows GTK+ 环境搭建(详解)
Windows GTK+ 环境搭建最近要做界面的一些东西,但是对微软提供的类库MFC不是很熟悉,里面封装了大量的Windows API比较麻烦,然后就想着其他方式吧!Qt、GTK+原本想学学Qt的,Qt跨平台、文档也多点,使用也更广泛。但是Qt的插件一直没有下载下来,然后就先学习学习GTK+吧!在网上搜了好多关于Windows GTK+环境搭建的方法,但是很多说的都不是很清楚,所以自己就参考了一些文档,在官网上下载了所需的环境文件,自己搭建了GTK+的环境。并进行了详细的记录,以下是主要内容。好了,言归正传
2022-06-14 23:02:26
2489
原创 对六大设计原则的理解
我是野路子出身,因此教科书式的知识我接触的相对较晚,二十三种设计模式可能是在2017年首次接触的,而六大设计原则是2020年才首次听闻。这么久以来,我一直对这六种设计原则理解的比较浅显,因为我总觉得他们之间的界限不够明确,存在很多重叠的规则。 ̄□ ̄||但从个人的项目实践经验上,我还是有一些个人的理解,在此记录,也作为分享。对于一个多模块系统软件,大致上可以理解为:模块之间应尽可能采用接口调用方式,即面向接口编程,这样可以在一个模块改动时对另一个模块影响最小; 模块里类的业务功能设计,遵循单
2022-04-26 09:08:52
224
原创 如何关闭WinDefender(亲测有效)
Windows自带杀毒软件经常会出现MsMpEng.exe占用CPU高,且无法结束进程的问题。该方法理论上适用于任何windows版本,甚至适用任何不想让其启动的程序。方法(以MsMpEng.exe为例):Step1:系统运行状态下记录下MsMpEng.exe的路径。Step2:关机重启进入PE系统。Step3:找到MsMpEng.exe文件,右键使用记事本打开,随便删除一段内容,保存。Step4:重启系统,搞定!下图是我更改后的MsMpEng.exe,为防止意外做了备份Ms
2022-04-16 12:47:45
7376
原创 几种避免死锁的思路
总原则:仅可能的精细化使用锁。1. 使用原子操作;2. 使用读写锁或递归锁,代替互斥锁;3. 借鉴双缓冲原理,比如在释放一个中的元素时,通过原子操作先将其放入一个缓冲区容器,在该缓冲区统一进行释放。暂时只想到这些...
2022-04-06 22:26:22
377
原创 一个增强版单例模板(介绍看注释)
namespace x2lib{ namespace xUtils { /** * @brief 增强版单例模板,三个特点: * 1.代码精炼,仅需一个.h文件; * 2.支持对单例对象进行初始化和反初始化; * 3.支持在初始化时向单例对象传参; * @param[in] T 欲设为单例的类 * @param[in] Args 构造函数参数类型 * @author xktesla */ templ.
2022-03-25 14:34:14
354
原创 DrawClient技术总结(不定期更新)
前言DrawClient是前段时间刚发布的一个windows看盘助手,融合了我这些年的技术积累,也是我个人兴趣与技术的结合。我将努力保证这个软件体积永远不会超过10M,即便第一个版本就已经9.7M——软件体积不能过大是我对一个软件的第一要求!这篇文章用于记录该软件所用到的技术点以及软件架构。另外,软件服务端也采用纯C++编写,支持windows/linux跨平台。主要技术点【个人编写】x2lib::AppLoad 模块加载框架类(同步/异步,进度通知);x2lib::StrUt.
2022-02-10 20:13:56
568
原创 将带捕获的lambda转换为函数指针
如果你和我一样,曾经苦苦寻找一种“lambda转换为函数指针”的方法,结果在你使尽浑身解数搜索后,发现网上的答案基本都是针对“不带捕获”的lambda。但是当你看到这篇文章的时候,恭喜你!找到了。将“带捕获的lambda”转换为函数指针的方法很简单,如下图:但是!!!这种方法可能存在隐患,具体什么隐患?我暂时也说不清,不过可以告诉你的是,之所以编译器默认可以将不带捕获的lambda转为函数指针,而不能将带捕获的lambda转为函数指针,是因为从根本上讲,带捕获的lambda被编译器解释成了对
2022-02-09 18:43:21
5545
8
原创 派生类对象无法访问基类同名函数
标题即本文结论,但关键点在“同名”二字。关于“同名函数”这四个字,在学习C++继承时可能会在两个地方遇到,一个是函数重载,一个便是继承重写。在学习重载时,课本应该有类似表述:函数名相同,但参数列表不同;在学习继承时,课本应该有类似表述:派生类会隐藏基类的同名函数;又由于一般都是先学重载,后学继承,因此很多人会将这两处的“同名函数”的含义搞混淆。而实际上,继承中的“同名函数”,指的仅仅是函数名相同,而参数列表可同可不同,也就是说,只要派生类中出现了同名函数,那么基类中的同名函数都将被隐藏,老规矩,上图
2022-01-24 14:47:46
683
原创 你怕不是对unordered_map有误解吧?(附插入顺序和读出顺序相同的maplist)
早期接触stl容器时,都知道std::map有自动排序的特点,有时候业务恰巧需要避免这种排序,便认识了std::unordered_map,正如它的名字——“无序map”。然而,此“无序”可能并非彼“无序”。正确的理解应该是“胡乱排序map”,因为该容器不保证插入顺序与读取顺序一致。如下图所示:怎样?如果颠覆了您的认真,麻烦给本文点个赞。暂时未找到stl有能保证插入顺序和读取顺序一致的键值对容器,迫于无奈,我使用std::list和std::pair实现了一个简易顺序键值对容器(即用例中的map
2022-01-20 17:02:39
2956
1
原创 (C++11)std::regex确实存在bug
最近半年已经是第三次碰到。第一次碰到时没仔细深究,换做boost结果可以了,然后就过去了;第二次又碰到匹配失败,结果发现是宽窄字符的原因,改过之后发现可以了,当时我还告诫自己“不要轻易怀疑权威!”但是抱歉,今天又遇到了,而且这次排除了各种可能的原因,千真万确定位到是stl的问题!编译环境: VS2010工具集(根据资料显示支持不完整的C++11); boost_v1.59; win10_x64;第三方网址匹配结果也是true,唯有stl匹配为false
2022-01-19 21:07:20
905
原创 程序猿炒股
今年是我入市的第四年,战绩如下图。简单总结一下,第一年凭本事亏掉50%,第二年第三年凭运气赚了40%,第四年凭实力赚了10%,现在基本上盈亏平衡。我一直将炒股认作是少有的几种合理的“不劳而获”的赚钱方式之一。我一直很坚信股市可以赚钱,即便是亏损50%的时候。这几年我一直在钻研炒股技巧,并且自认为已经有一些有效成果。另外,我还在开发一款自动炒股软件,由于是业余时间开发,效率并不高,已经持续了一年时间,但我的策略一直很清晰,预计2022年年中可以达到初步上线标准。同志们请拭目以待...
2021-12-31 20:37:14
388
原创 C++如何限制模板类的类型
在使用泛型编程时,有时候会有类似需求:要求T只能为某个类,或某几个类,那应该如何实现?据我所知有3中:使用模板函数; 使用typeid函数; 巧用static_cast;前两种学习理解起来都比较复杂,以后有空了再更,暂时只介绍第3种,示例和方法如图:...
2021-12-29 13:59:56
4142
原创 一个好用的C++ string Format“函数”
我这个人总是喜欢在写代码时追求极致,比如总是纠结于变量的命名,内存的消耗,执行的效率,接口的便捷性,代码的可扩展性。。。但很多时候需要在他们之间做取舍,这就导致我在编码时经常陷入僵局,唉。。。真是程序员的可悲,为此几年前我还专门将自己的优快云签名改成了现在这样。今天我又带来一个函数,挺不起眼的,但是也分享一下const std::string& StrUtil::Format(const char* pszFmt, ...){ va_list body; va_start(body
2021-12-26 12:01:26
1862
原创 我们的研发项目B现状及问题
基本情况(截止2021-12-08):开发环境:VS2010工具集代码量(.c;.h;.cpp,不含第三方库和基础库):285万行工程个数(不含第三方库和基础库):200个SVN分支数:107个让人诟病的问题:VS2010工具集对C++11不够友好。但由于个别项目依赖了旧版本lib,一直没有升级工具集。 编译环境搭建过于复杂。以至于同事们都只能从官网下载之前的安装包,解压后覆盖到生成目录,才能保证编译出的程序能正常启动。【离谱...
2021-12-26 10:09:31
550
原创 C++实现Split
/*** @brief 分割字符串,使用方法如下:* std::vector<std::string> vecFiled;* Split("1,2,3,4", ",", vecFiled);* @param[in] str 欲分割的字符串* @param[in] div 分隔符* @param[out] vecFiled 存储子串* @return 失败返回-1,否则返回子串个数* @author xktesla@2..
2021-12-23 20:29:11
1576
原创 纯C实现的高效好用的Split
先上效果图,代码在最后/*** @brief 分割字符串,并将其保存到pStrs。使用方法如下:* int nStrs = Split("1,2,3,4", ",", nullptr);* char** pStrs = (char**)malloc(nStrs); // 或 char pStrs[m][n]; 只要保证m*n>=nStrs即可* nStrs = Split(str, div, pStrs);* free(pStr.
2021-12-23 19:50:28
782
原创 从2345离职的原因
不知不觉已经从2345离职近一年。2345是我目前为止待过的最有名气,市值最高的一家公司,也可谓是我的职业巅峰了。可惜我只待了半年。当初离职并非我的主观意愿,而是在三重因素的叠加下,不得已离职。第一件事,是我和一位同事在一个项目的协同开发中发生了严重意见分歧,我们在一个星期内连吵了4次架。他是P5的老员工,我是P3,当时新开了一个项目,他作为业务层主力开发兼项目负责人,我作为ui层的主力开发。在涉及到模块间对接时,发生了分歧,我要求他向我提供模块之间的调用接口,调用流程,调用方法。得到了他直截了当的拒
2021-12-16 22:34:23
172
原创 迪米特原则与需求变动的较量——类中函数设计
作为一个开发,最头疼的莫过于需求频繁变动,遇到一个高水平的产品还好,但如果你家产品总是靠着拍脑袋写需求,那简直是噩梦。我在刚毕业时遇到过一个,现如今又遇到一个……六大设计原则中的迪米特原则,提倡的是暴露最少接口,适用于系统与系统对接,模块与模块对接,类与类对接,甚至类中的函数互调。当我们预判到需求可能会发生变动时,在不便沟通时,如何在迪米特原则和可能变动的需求之间取折中解?——需求变动后代码改动最小,且改动对类的内部结构影响最小。首先要具备由顶层设计思维(本文指由类中设计),然后我的方法您才会觉得有
2021-12-11 12:04:04
191
原创 一种更合理的面试方案
我是个“个性鲜明”的人,我指的是做事风格,并非社交性格。有个成语可以一定程度上形容我——愤世妒俗。我讨厌一些传统制度,主要有:统考制,传统婚俗,传统面试。毫无疑问与制度对抗的人基本都没有好下场,我也一样。暂且不讨论我在面对统考制和传统婚俗时的做法。传统的程序员面试,一般分为三阶段:面技术,面管理,面人品。我总觉得面试和统考很像,我指的是,两者在筛选人才上都同样极具盲目性。有三个问题我想问问用人单位或教育部:所有人都一样吗?并不是。所有人都将一样吗?也并不是。所有人都应该一样吗?当然也不是。
2021-11-23 08:52:13
236
原创 对sqlite3二次封装——提供更人性化的接口
先看一段使用方法:另外,关于代码中的字符串动态加密,可使用x2lib中的MixPool类SqliteDB.h#ifndef _20266D69_1291_4C2A_8708_56BE03DB0B74#define _20266D69_1291_4C2A_8708_56BE03DB0B74#include "depends/incfile.h"#include "../../../sqlite3xx/include/sqlite3xx.h"#include "xCores.h"
2021-11-09 09:13:24
602
原创 一种优雅的单例写法(三个特点)
该方法从订阅器(Mailer)中抽提出来,详情查看 https://blog.youkuaiyun.com/xk641018299/article/details/111461454// 特点:// 1. 可免去创建一个cpp文件:假如单例类比较简单,只需要一个.h文件,通过设计一个_get_static_ptr_()可以免去专门为初始化一个静态成员变量(如s_pInstance)而创建一个cpp文件。// 2. 可在需要的时候对单例对象进行释放:可通过UnInitialize()在必要
2021-05-13 10:05:48
153
原创 一个基于消息循环的定时器——TimerCall
之前写过一个TaskRunner,里面有对Timer的支持,但是是基于时间戳的定时器。这次的TimerCall是一个基于消息循环的纯定时器。/*************************************************************************** Copyright(c) 2016-2021 hicker** All rights reserved.** Name : TimerCall.h** Desc : 一个基于消息循环的定时器**.
2021-01-16 09:10:14
344
原创 Mailer——一个优雅的订阅器(支持多线程),接口简单且强大
/*************************************************************************** Copyright(c) 2016-2025 faker** All rights reserved.** Name : Mailer.h** Desc : 一个高级订阅器,接口简单但强大。** 主要特点:** 1.可满足类级[通过继承INotifier/IReceiver]和函
2020-12-20 19:44:08
280
1
原创 DataCacher——一个数据缓冲器,支持多种底层传输协议(Socket、管道等)
#ifndef _E5295BC9_8074_44E9_A754_2B8ADCCB3004#define _E5295BC9_8074_44E9_A754_2B8ADCCB3004#include "depends/incfile.h"#include "CFunc.h"#include "xCores.h"#include "SysUtil.h"namespace x2lib{ /*************************************************.
2020-12-18 09:23:15
414
原创 两种获取桌面图标的方法,以及查看几个系统图标隐藏状态的方法
通过跨进程读取SysListView32获取// 主要流程// 初始化OleInitialize(NULL);// 获取IShellFolder对象CComPtr<IShellFolder> pShellFolder;SHGetDesktopFolder(&pShellFolder));// 获取item集合IEnumIDListCComPtr<IEnumIDList> pIds;pShellFolder->EnumObjects(0, .
2020-12-11 14:03:37
989
原创 简单好用的轻量C++ JSON库MemJson
开源(地址见文末),只有一个类MemJson,主要成员函数有:1.Put:向当前DatX对象添加一个KV,当K已存在时会进行值替换,返回当前DatX的引用;2.Get(s):从当前DatX对象获取K==s的KV对,仅支持有键名的元素;用XTY包装并返回;3.Get(i):从当前DatX对象获取第i个KV对,支持所有类型元素;用XTY包装并返回;4.Put:向当前DatX添加一个有键名元素,一般用于添加键值对元素,返回当前DatX的引用;5.Add:向当前DatX添加一个无键名元素,一般用于添加
2020-11-28 14:50:34
370
原创 x2lib——一个C++工具库,包含文件操作、字符串工具、系统工具、网络工具、PE工具、管道、线程池、任务机、广播器、数据缓冲器等。剥离出一些类开源,持续更新
https://github.com/fakerXue/TaskRunner
2020-10-21 14:14:36
617
原创 强制把成员函数指针当成一般函数指针用
class A{public: int func(void *p) { return 0; }};int main(){ A a; typedef int(*pfunc)(void *); typedef int(A::*pfunc2)(void *); pfunc2 f2 = &A::func; int b = *(int*)&f2; //__asm //{ ...
2020-09-17 13:46:42
202
原创 新手的神奇bug——ImportError: cannot import name XXX
99%的概率是自己项目的文件名与系统文件名重名。一张图解释
2020-06-05 08:32:08
549
原创 小程序自定义弹框组件popWindow,支持text,input,radio,check,详情看演示
主要功能:1.可以自定义四种格式:text,input,radio,check;2.可以自定义按钮个数【0~n】,并可以为每个按钮增加自定义回调;3.支持下部显示tip;4.主要方法:popWindow.showText,showEdit,showRadio,showCheck;接下来看效果:代码如下:popWindow.jsconst util ...
2020-02-14 15:55:07
492
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人