![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 84
木头云
这个作者很懒,什么都没留下…
展开
-
获得位图非屏蔽色/屏蔽色区域的算法
// 获得图片区域void CImgBitmap::GetImageRgn(CRgn& fulRgn, COLORREF clrTrans /*= RGB(255, 0, 255)*/, BOOL bCombineTrans /*= FALSE*/, int nCombineMode /*= RGN_OR*/,原创 2010-02-13 08:28:00 · 979 阅读 · 0 评论 -
C++设计模式系列
写此系列文章主要基于两点:网络上关于C++的设计模式文章不多,大部分都是基于.net或java的版本,由于C++本身的一些特性,很多设计模式采用C++来实现,从语言角度上来讲会显得不够优美,容易将真正的模式核心部分淹没在繁琐的new与delete等代码处理上.我个人是习惯与C++的,所以打算从头把所有设计模式用C++过一遍,既能够熟悉这些常规模式,也可以提高自身的代码水平.原创 2011-02-12 16:28:00 · 1048 阅读 · 0 评论 -
UTF-8、UTF-16、UTF-32编码的相互转换
最近在考虑写一个可以跨平台的通用字符串类,首先需要搞定的就是编码转换问题。vs默认保存代码文件,使用的是本地code(中文即GBK,日文即Shift-JIS),也可以使用带BOM的UTF-8。gcc则是UTF-8,有无BOM均可(源代码的字符集可以由参数-finput-charset指定)。那么源代码可以采用带BOM的UTF-8来保存。而windows下的unicode是UTF-16编码;linux则使用UTF-8或UTF-32。因此不论在哪种系统里,程序在处理字符串时都需要考虑UTF编码之间的相互原创 2014-02-23 21:37:34 · 11071 阅读 · 1 评论 -
用mingw静态编译Qt4.8.2和Qt5.1.1
因为一些乱七八糟的原因,我需要用mingw静态编译Qt4.8.2和Qt5.1.1。经历了一天的折腾之后,自觉编译一下Qt还是件颇为麻烦的事情,故将过程略作总结,以备不时之需。首先,在编译之前,我需要下载mingw、qt-everywhere-opensource-src-4.8.2和qt-everywhere-opensource-src-5.1.1。然后,准备开始编译了,当然原创 2014-03-07 21:02:13 · 6252 阅读 · 0 评论 -
一段tricky code
Wrote by mutouyun. (http://darkc.at/a-tricky-code/)刚刚在网上闲逛,看到reddit上关于最受欢迎的代码的讨论贴,上面有一小段非常有意思的代码:unsigned int v; // to count the number of bits set in vunsigned int c; // c accumulates the原创 2014-05-16 22:03:06 · 1101 阅读 · 0 评论 -
如何在C++中获得完整的类型名称
折腾C++的类型系统是一个很有意思的事情。当钻进去之后就会发现,一些原先比较晦涩的基本概念,在研究的过程中都清晰了不少。check_type的实用价值在于,可以利用它清晰的看见C++中一些隐藏的类型变化。比如完美转发时的引用折叠。在实现check_type的过程中,用到了不少泛型,甚至元编程的小技巧,充分运用了C++在预处理期、编译期和运行期(RAII)的处理能力。虽然这些代码仅是学习研究时的兴趣之作,实际项目中往往typeid的返回结果就足够了,但上面的不少技巧对一些现实中的项目开发也有一定的参考和原创 2014-05-16 00:37:02 · 21213 阅读 · 3 评论 -
使用模板元编程操作类型集合(C++11下的TypeList)
Wrote by mutouyun. (http://darkc.at/cxx-type-list/)群里有个朋友要实现这么一个功能:如何在编译期把一个函数类型的参数减少一个。简单来说,就是实现下面这个模板:remove_func_par::type; // type = void(int, long)根据输入的编译期整数,把函数参数表里对应的参数干掉一个。为了实现原创 2014-05-28 22:44:01 · 3352 阅读 · 0 评论 -
内存池之一:基本概念
Wrote by mutouyun. (http://darkc.at/memory-pool-basic-concepts/) 1. 内存池是什么内存池(Memory Pool),是内存分配器(Memory Allocation)的一种表现形式。它以预存储的方式预先分配一大块内存(相对于每次请求的内存大小来说),使得绝大部分的内存请求只需要在已分配的大块内存上划分出一小块原创 2015-02-28 20:23:09 · 1381 阅读 · 0 评论 -
一款C++静态分析工具 —— CppDepend
Wrote by mutouyun. (http://darkc.at/cppdepend/) 去年6月份的时候,CppDepend的一位技术社区经理(technical community manager)突然发邮件联系我,赠送了我一份license,并邀请我体验下他们的C++静态分析工具,也就是CppDepend。在这款软件的官方网站上,我们可以看到使用CppDepen原创 2015-02-28 20:31:34 · 6374 阅读 · 2 评论 -
C++设计模式之Prototype(原型)模式
当我们需要创建一种类型的对象时,可以用工厂模式;当对象的局部容易发生变化时,我们有建造者模式.但当我们有大量的对象类型,或者对象类型不易知道时,我们如何根据已有的一个对象快速构建新的对象呢?我们需要一个可以封装掉不同种类对象之间的区别,仅伸出相同的克隆接口,让所有的对象只需要考虑自身的复制.这样我们就可以快速得到大量相同类型的对象了.具有这种特征的模式是原型模式.其类图如下:原创 2013-12-01 13:59:58 · 1153 阅读 · 0 评论 -
C++设计模式之Factory(工厂)模式
工厂模式一般是学习设计模式的第一课,它本身也是创建型模式中较为常用的一种模式.工厂模式希望解决的是"如何高效而方便的创建当前需要的对象"的问题.当一个对象对外提供的接口稳定,而这类对象的具体实现容易发生变化时,我们可以考虑使用工厂来封装对象的实现变化,并提供统一的对象创建方法.工厂模式可以分为三种不同的模式,分别对应不同情况下的解决方案.1.简单工厂模式原创 2013-12-01 13:35:15 · 2163 阅读 · 0 评论 -
C++设计模式之Builder(建造者)模式
我们可能会遇到这种情况,比如一个配置文件读取模块,它由几个小模块组成,每个小模块负责读取一种类型的配置.我们读取配置的顺序和过程是固定的,但是每个配置类型可能会因为业务的需求发生很多变化.这个过程和造房子有点像.每栋楼的建造过程是差不多的,但是各个部件在每栋楼里各不相同.有没有这样一种模式,可以帮我们应对这种复杂对象的各个部分频繁变化的需求呢?建造者模式就是这样一种模式.它提供原创 2013-12-01 13:50:59 · 1134 阅读 · 0 评论 -
字符串处理及效果类
//////////////////////////////////////////////////////////////////// StringEffect - 字符串效果//// Author: 木头云// Blog: http://blog.csdn.net/markl22222// E-Mail: mark.lonr@tom.com// Version: 1.0原创 2010-02-13 08:37:00 · 1269 阅读 · 0 评论 -
C++设计模式之Singleton(单件/单例)模式
单例模式,顾名思义,此模式下的对象实例永远只有一个.很多初学者感觉,这个模式的用处不大.但实际上,这个模式应该算是应用得最广泛的模式之一了.很多情况下,我们需要考虑单例的实现方式.如全局内存池;全局资源管理器;某个全局的工具类工厂...在UI开发上,同一时间点上仅会出现一个实例的对话框,也可以使用单例实现.原创 2011-02-26 19:05:00 · 2711 阅读 · 4 评论 -
C++设计模式之前言
我个人接触设计模式的时间较晚,将它们应用在实际项目中也就这一两年的时间.当时为了快速的学习掌握设计模式,除了参考GoF的之外,还在网上参看了TerryLee的.NET设计模式系列文章,以及程杰的,并利用业余时间写了不少C++的例子.此时将它们一一整理发出来,也可以说是对自身的一次总结吧.原创 2011-02-12 16:49:00 · 1424 阅读 · 1 评论 -
高斯模糊算法的实现和优化
前两年我发过一文:Win32下的C++高斯模糊算法实例,里面给出了一个高斯模糊的实现,并写了粗略的简介。不过当时内容讲得非常简单,而且附带的例子算法是有缺陷的:一是对图片的边角采用“跳过”的方式处理,导致模糊后的图片有黑边; 二是算法本身采用的是二维矩阵,效率上不如一维高斯模糊好。鉴于此,这里重新整理并试图完整的讲述一下高斯模糊。一、高斯模糊是什么模糊算法,不论是使用哪种算法,...原创 2013-08-26 00:07:10 · 43924 阅读 · 12 评论 -
C++ 下 typeof 的实现
现在我们有这样一坨代码:std::vector arr;// ...for(std::vector::iterator iter = arr.begin(); iter != arr.end(); ++iter){ // ...}其中难看而又不好维护的std::vector::iterator,由于我们无法自动获知arr.begin()的类型,从而不得不一写再写。C++11下有ty原创 2013-08-28 22:26:51 · 20622 阅读 · 1 评论 -
跨平台的原子操作及简单的循环锁实现
原子操作一直是多线程编程中的重要杀器之一。Win32里我们有Interlocked系列API,其他平台下也有各自的原子操作接口。如果想要让我们的程序能够拥有跨平台且统一的多线程调度方案,那么就必须得把不同的操作接口统一。首先,我们需要定义一套平台判断宏,来方便我们决定使用何种接口:#if defined(WINCE) || defined(_WIN32_WCE)# define NX_OS_原创 2013-08-28 22:00:42 · 3210 阅读 · 0 评论 -
C++的杂七杂八:我家的返回值才不可能这么傲娇(右值引用和移动语义)
大凡编程语言,都会有“函数”这个概念。而对于外部而言,一个函数最重要的部分就是它的返回值了。直接通过返回值将函数的计算结果返回出去,不论是函数还是调用者都会身心愉悦,因为这是最自然的使用方法了。但是在C++里,通过函数返回值返回处理结果往往是一种奢侈的行为。原创 2013-10-27 09:43:18 · 2840 阅读 · 0 评论 -
C++的杂七杂八:如何实现一个简单的bind
Wrote by mutouyun. (http://orzz.org/cxx-bind/)这篇文的草稿我是在2014年5月11号开始打的,可是拖拖拉拉直到现在才真正动笔写,自己对自己也是醉了。。之所以写bind而不是什么其他的东西,是因为bind在各种C++的utility里面可以说是最能体现出“利用语言本身来拓展语言功能”这一特征的了。在C++98/03的时代,人们为了原创 2015-02-28 20:47:04 · 2072 阅读 · 0 评论