自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

云彩挂上的二叉树

技术博客移步至: http://orzz.org

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

原创 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 2064

原创 一款C++静态分析工具 —— CppDepend

Wrote by mutouyun. (http://darkc.at/cppdepend/) 去年6月份的时候,CppDepend的一位技术社区经理(technical community manager)突然发邮件联系我,赠送了我一份license,并邀请我体验下他们的C++静态分析工具,也就是CppDepend。在这款软件的官方网站上,我们可以看到使用CppDepen

2015-02-28 20:31:34 6315 2

原创 内存池之一:基本概念

Wrote by mutouyun. (http://darkc.at/memory-pool-basic-concepts/) 1. 内存池是什么内存池(Memory Pool),是内存分配器(Memory Allocation)的一种表现形式。它以预存储的方式预先分配一大块内存(相对于每次请求的内存大小来说),使得绝大部分的内存请求只需要在已分配的大块内存上划分出一小块

2015-02-28 20:23:09 1359

原创 关于内存对齐的那些事

Wrote by mutouyun. (http://darkc.at/about-data-structure-alignment/)1. 内存对齐(Data Structure Alignment)是什么内存对齐,或者说字节对齐,是一个数据类型所能存放的内存地址的属性(Alignment is a property of a memory address)。这个属性

2014-07-22 21:53:58 17270 2

原创 为什么直接杀死线程是不好的

Wrote by mutouyun. (http://darkc.at/why-shouldnt-i-kill-a-thread/)我们知道,windows里有个API叫TerminateThread,它可以干掉任何正在欢快小跑的线程。对应的,liunx里则是pthread_cancel(不是pthread_kill,这玩意本质是向线程发信号,而不是杀死线程)加上PTHREAD_CAN

2014-06-22 11:39:08 6732

原创 使用模板元编程操作类型集合(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 3334

原创 一段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 1085

原创 如何在C++中获得完整的类型名称

折腾C++的类型系统是一个很有意思的事情。当钻进去之后就会发现,一些原先比较晦涩的基本概念,在研究的过程中都清晰了不少。check_type的实用价值在于,可以利用它清晰的看见C++中一些隐藏的类型变化。比如完美转发时的引用折叠。在实现check_type的过程中,用到了不少泛型,甚至元编程的小技巧,充分运用了C++在预处理期、编译期和运行期(RAII)的处理能力。虽然这些代码仅是学习研究时的兴趣之作,实际项目中往往typeid的返回结果就足够了,但上面的不少技巧对一些现实中的项目开发也有一定的参考和

2014-05-16 00:37:02 20992 3

原创 用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 6237

原创 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 10864 1

原创 关于设计模式的7种坏味道和11种原则

设计模式作为一组抽象的设计思想,肯定有一些基本的原则.否则的话,任何设计都可以称之为"良好设计"的一种了.在设计模式中,也有整体"不允许"和"需要遵循"的方方面面.只要遵循了下面这些基本思想,写出来的设计往往都是很优秀的设计.7种坏味道僵化性: 说白了就是整个系统过于僵硬,没办法或很难针对其中的某个需要修改的地方做灵活的调整,牵一发而动全身.脆弱性:

2013-12-01 15:11:38 1443

原创 C++设计模式之Prototype(原型)模式

当我们需要创建一种类型的对象时,可以用工厂模式;当对象的局部容易发生变化时,我们有建造者模式.但当我们有大量的对象类型,或者对象类型不易知道时,我们如何根据已有的一个对象快速构建新的对象呢?我们需要一个可以封装掉不同种类对象之间的区别,仅伸出相同的克隆接口,让所有的对象只需要考虑自身的复制.这样我们就可以快速得到大量相同类型的对象了.具有这种特征的模式是原型模式.其类图如下:

2013-12-01 13:59:58 1148

原创 C++设计模式之Builder(建造者)模式

我们可能会遇到这种情况,比如一个配置文件读取模块,它由几个小模块组成,每个小模块负责读取一种类型的配置.我们读取配置的顺序和过程是固定的,但是每个配置类型可能会因为业务的需求发生很多变化.这个过程和造房子有点像.每栋楼的建造过程是差不多的,但是各个部件在每栋楼里各不相同.有没有这样一种模式,可以帮我们应对这种复杂对象的各个部分频繁变化的需求呢?建造者模式就是这样一种模式.它提供

2013-12-01 13:50:59 1123

原创 C++设计模式之Factory(工厂)模式

工厂模式一般是学习设计模式的第一课,它本身也是创建型模式中较为常用的一种模式.工厂模式希望解决的是"如何高效而方便的创建当前需要的对象"的问题.当一个对象对外提供的接口稳定,而这类对象的具体实现容易发生变化时,我们可以考虑使用工厂来封装对象的实现变化,并提供统一的对象创建方法.工厂模式可以分为三种不同的模式,分别对应不同情况下的解决方案.1.简单工厂模式

2013-12-01 13:35:15 2140

原创 nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)

恩。。nixyx确实算不上是一个构建系统。所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分。类似的软件还有:google的gyp、腾讯的Blade等。它们最大的好处在于,可以不考虑平台之间的差别,使用统一的配置文件和命令,做到跨平台部署。它们往往还支持很多很高端的功能,比如集成自动测试,代码检查(Blade)。。

2013-11-30 15:10:53 1761

原创 C++的杂七杂八:我家的返回值才不可能这么傲娇(右值引用和移动语义)

大凡编程语言,都会有“函数”这个概念。而对于外部而言,一个函数最重要的部分就是它的返回值了。直接通过返回值将函数的计算结果返回出去,不论是函数还是调用者都会身心愉悦,因为这是最自然的使用方法了。但是在C++里,通过函数返回值返回处理结果往往是一种奢侈的行为。

2013-10-27 09:43:18 2834

原创 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 20585 1

原创 跨平台的原子操作及简单的循环锁实现

原子操作一直是多线程编程中的重要杀器之一。Win32里我们有Interlocked系列API,其他平台下也有各自的原子操作接口。如果想要让我们的程序能够拥有跨平台且统一的多线程调度方案,那么就必须得把不同的操作接口统一。首先,我们需要定义一套平台判断宏,来方便我们决定使用何种接口:#if defined(WINCE) || defined(_WIN32_WCE)# define NX_OS_

2013-08-28 22:00:42 3195

原创 高斯模糊算法的实现和优化

前两年我发过一文:Win32下的C++高斯模糊算法实例,里面给出了一个高斯模糊的实现,并写了粗略的简介。不过当时内容讲得非常简单,而且附带的例子算法是有缺陷的:一是对图片的边角采用“跳过”的方式处理,导致模糊后的图片有黑边; 二是算法本身采用的是二维矩阵,效率上不如一维高斯模糊好。鉴于此,这里重新整理并试图完整的讲述一下高斯模糊。一、高斯模糊是什么模糊算法,不论是使用哪种算法,...

2013-08-26 00:07:10 43830 12

原创 New web site...

技术博客移步至: dark-c.at

2011-04-08 01:22:00 856

原创 完整的位图文件解析

与上次简单的位图加载不同,这次是完整的位图格式解析.暂时没有考虑压缩格式的位图.下面的内容难免有错误,各位如发现纰漏请及时指出.

2011-04-06 12:01:00 2110

原创 加载bmp文件

这里给出的加载方法并没有考虑图片文件可能出现的所有情况,只是一个简单的解析过程.加载后的HBITMAP指向一个32位DIB(这里这样做是为了统一png/jpg/bmp在加载之后的像素处理与显示).

2011-03-27 22:24:00 1132

原创 C++设计模式之Singleton(单件/单例)模式

单例模式,顾名思义,此模式下的对象实例永远只有一个.很多初学者感觉,这个模式的用处不大.但实际上,这个模式应该算是应用得最广泛的模式之一了.很多情况下,我们需要考虑单例的实现方式.如全局内存池;全局资源管理器;某个全局的工具类工厂...在UI开发上,同一时间点上仅会出现一个实例的对话框,也可以使用单例实现.

2011-02-26 19:05:00 2704 4

原创 C++设计模式之前言

我个人接触设计模式的时间较晚,将它们应用在实际项目中也就这一两年的时间.当时为了快速的学习掌握设计模式,除了参考GoF的之外,还在网上参看了TerryLee的.NET设计模式系列文章,以及程杰的,并利用业余时间写了不少C++的例子.此时将它们一一整理发出来,也可以说是对自身的一次总结吧.

2011-02-12 16:49:00 1418 1

原创 C++设计模式系列

写此系列文章主要基于两点:网络上关于C++的设计模式文章不多,大部分都是基于.net或java的版本,由于C++本身的一些特性,很多设计模式采用C++来实现,从语言角度上来讲会显得不够优美,容易将真正的模式核心部分淹没在繁琐的new与delete等代码处理上.我个人是习惯与C++的,所以打算从头把所有设计模式用C++过一遍,既能够熟悉这些常规模式,也可以提高自身的代码水平.

2011-02-12 16:28:00 1040

原创 在Win32工程中使用GdiPlus

在vs直接建立的win32工程里直接添加GdiPlus的相关支持文件,编译器会报几百个错误,都是些什么"缺少类型说明符",语法错误或者标识符错误之类的.一般这种情况都是由于头文件引用缺少一些特殊的支持,或者引用顺序错误导致的.网上的解决办法一般有两种:1.关闭#include 前面的WIN32_LEAN_AND_MEAN定义;2.在导入GdiPlus支持文件之前添加#include .这两种解决办法究竟有什么不同呢?

2010-07-18 17:09:00 2771 1

原创 一个简单的RTTI实现

RTTI是"Runtime Type Information"的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.最近在写的一些东西,不想使用MFC之类的框架,但是却在很多地方需要根据名称确定指针的转换类型或者利用抽象工厂生产抽象的类对象指针...我很不喜欢不容易维护且难看的"switch case",而C++本身的RTTI功能又显得很单薄...看来只有自己写一个C++的RT

2010-02-13 11:42:00 1917

原创 支持引用计数的智能指针类模板

智能指针算是很多人喜欢思考的一种内存管理方案了...虽然这种方案本身存在一些硬伤,但是在很多需要智能,且使用方式相对较简单的场合里应用还是比较多的.先发一个我最初写好的版本://////////////////////////////////////////////////////////////////// TSmartPtr - 智能指针类模板//// Author: 木头

2010-02-13 09:05:00 1243

原创 字符串处理及效果类

//////////////////////////////////////////////////////////////////// StringEffect - 字符串效果//// Author: 木头云// Blog: http://blog.csdn.net/markl22222// E-Mail: [email protected]// Version: 1.0

2010-02-13 08:37:00 1263

原创 获得位图非屏蔽色/屏蔽色区域的算法

// 获得图片区域void CImgBitmap::GetImageRgn(CRgn& fulRgn, COLORREF clrTrans /*= RGB(255, 0, 255)*/, BOOL bCombineTrans /*= FALSE*/, int nCombineMode /*= RGN_OR*/,

2010-02-13 08:28:00 974

原创 支持类模板的 MFC RTTI 宏

//////////////////////////////////////////////////////////////////// 类模板运行时类信息支持宏定义#ifdef _AFXDLL#define IMPLEMENT_TEMPLATE_RUNTIMECLASS(class_name, type_name, base_class_name, wSchema, pfnNew

2010-02-13 08:24:00 782

原创 文件/目录删除函数

// 删除文件/目录BOOL DelPath(LPCSTR lpPath){ // 创建文件对象 SHFILEOPSTRUCT lpsh; ZeroMemory(&lpsh, sizeof(lpsh)); // 调整文件对象 lpsh.fFlags = FOF_SILENT | FOF_NOCONFIRMATION; lpsh.wFunc = FO_DELETE

2010-02-13 08:06:00 623

空空如也

空空如也

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

TA关注的人

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