- 博客(20)
- 资源 (7)
- 收藏
- 关注
原创 2) 转换类型typeConvert [原创,泛型编程,自由下载转载,需注明出处]
这些基于typeTraits提供的一些类型转换功能,比如典型的if-else等等,判断两个类型是否相同,是否原始类型相同,,是否可转换,是否值可转换,是否基类派生类,是否序列类,是否数组,是否是原子类型,是否是内置类型,是否是枚举类型。如果你的项目中允许使用boost这类重量级库的话,还是推荐你使用boost,下面的源代码提供了一个可供选择的替代方案:如果你不想引入boost这种巨无霸或者你的
2013-10-07 14:26:55 1957
原创 10) 泛型工厂方法创建实例ClassRegister [原创,泛型编程,自由下载转载,需注明出处]
源代码可以在我的资源中去下载(包括用法测试的源代码):https://github.com/ShenXiaolong1976/MiniMPL 只需要用VS建一个空的工程,然后引入我的测试头文件即可。然后测试函数会在main函数之前运行,在控制台窗口中可以看到输出。 这个源文件的功能是实现像MFC的动态创建的效果。 但是和MFC相比,这个功能有下列优势: 1.MFC的动态创建...
2013-10-07 12:41:17 1514
原创 避免创建不必要的大对象(把大对象转换为小对象)
在模板函数中,很多情况下,我们仅仅需要一个对象的类型,而并不需要这个对象的实体,例如: templatetypenameT>void HandObject(){ couttypeid(T).name() <<endl;} 在调用时,用户必须明确地指定模板类型:HandObjectbigObject>();很多时候,用户并不喜欢这
2013-10-24 16:58:51 1209
原创 开始学习java
公司项目转Android/java方向,现在开始学习java,哎,十几年的C/C++经验怕要浪费了。开始看java简明教程,感觉java把C++阉割得一塌糊涂,强大的特性全部删除掉了。个人感觉,java的做法就是把C++的一些高级特性给封装了,然后把开发者可以自由发挥的高级语法给阉割掉了,这样用户只能使用java封装后的东西。而且听人介绍的java中比较牛的特征后,感觉这些特性都可以用
2013-10-24 16:51:37 785
原创 反转单向链表的实现
单向链接的反转往往会拿来考验人的基本逻辑,因为其中几个变量的初始化和更新稍微考虑疏漏一点儿就出错。下面的算法提供了一个简洁的实现,不用再考虑那几个变量的初始化及更新了。//反转单向链表的实现。templateT* reverseSingleList(T* pHead, T* T::*pNext,T*& pNewHead){ if (
2013-10-14 09:36:14 983
原创 左移/右移指定位数字符串 (算法http://blog.csdn.net/v_JULY_v/article/details/6322882 的实现)
以下内容来自于http://blog.csdn.net/v_JULY_v/article/details/6322882v_JULY_v博主提供了非常精妙的算法原理,佩服。但是我个人觉得算法的实现稍显麻烦,看那些算法的实现看得很头疼。我依据博主的算法,写出了下面的实现。实现原理:同博主所言,所谓的字符串左移/右移,就是交换字符串的两部分而已。所以下面的算法实现中,除了最终的一次
2013-10-11 09:45:39 1793
原创 编译期assert函数
编译期assert函数的目的在于当条件不满足时,阻止编译,从而防止错误的逻辑通过编辑。而运行期assert的目的在于运行时发现条件不满足时,产生一个Debug事件(DebugBreak),从而让调试器停下来方便用户检查原因。 需求描述有些比较关系,我们期望在编译期就能确保正确,需求情形:比如A,B,我们要求编译期就能保证A>B,否则编译不能通过。很明显,如果使用普通
2013-10-10 10:57:47 2876
原创 结构体对齐规则
结构体对齐 , #pragma pack(4),结构体的长度(sizeof)(一个没有考虑周详的位段结构体中,可能存在大量“缝隙”)1. 对齐规则1. 实际对齐值决定系统一次划分内存的字节数量。系统为变量分配内存时,必须先划分够变量数据类型需要的对齐空间(对齐模数,字节单位)。2. 结构体的实际对齐值为结构体中最大的数据类型的长度A与系统规定的
2013-10-10 10:51:19 1143
原创 命名空间及匿名命名空间
把命名空间单独提出来描述是因为:命名空间的功能几乎和前缀是一致的。1. 使用命名空间的必要性 在一个大的项目中,当多时合作时,多个人编写的库头文件中,不可以避免的存在变量名相同的冲突,特别都是作为全局变量存在的时候,这种冲突就更为明显,如何解决这种冲突?方法就是使用命名空间。 比如说,每个人所定义的变量,都以他自己的名字的缩写为前缀,假如...
2013-10-10 10:44:11 7769 3
原创 typeid及RTTI
C++中类型识别符typeid分静态识别和动态识别。静态识别是指在编译阶段进行的识别,动态识别是指在运行阶段进行的识别。只有动态识别需要RTTI的支持,但是RTTI是否打开不影响编译链接,只影响运行结果是否正确。 typeid的工作原理:1. typeid是依赖于保存在虚函数表里面的type_info块来获取真实对象信息的。而如果基类没有任何虚函数的话,typeid就
2013-10-10 10:27:49 1467
原创 内部链接(internal linkage)和外部链接(external linkage)
内部链接(internallinkage)/外部链接 (externallinkage)是和编译单元(translation unit)相关的一个术语,其主要影响函数或者对象的作用域及存储方式—是全局只存储一个,还是全局有许多量的副本。具有externallinkage的变量可以被其它源文件使用,整个程序内有效,并且全局只有一个。具有internallinkage的变量只能被本transl
2013-10-10 10:23:12 4723 3
原创 遍历所有时区的代码[windows]
window要没有提供遍历时区的代码,只提供了一些接口,让用户自己从注册表中遍历。比较麻烦,下面代码把这个功能封装了一下,让用户可以比较简单地处理所有时区。其中字符串用的是core::cstringex,大家可以用STD里面的字符串来代替,core::datetime里的数据结构体和SYSTEMTIME一样,大家可以把SYSTEMTIME封装一下就可以替换它了。//timezone.h
2013-10-10 10:15:47 1341
原创 简单地使用sym*函数族导出函数栈(Based on x86)
在有时我们需要导致当前线程的函数栈调用,但是我们又不期望自己来实现这个功能,下面的源代码可以帮你解决。导出函数栈其实就是sym*函数族的应用,该函数在dbghelp.dll中的,下面只是实现了简单的用法,使用的缺省的符号搜索路径,没有设置用户自定义的搜索路径:这样有两方面的考虑: 1. 这不是一个GUI程序,不想让使用者觉得麻烦,这里更合适的说法是提供了一个函数供用户调用。2.一般
2013-10-08 11:05:50 1315
原创 9) 泛型数学运算符函数mathOperator [原创,泛型编程,自由下载转载,需注明出处]
下面是一些算术操作符,其通常作为一些接口的比较参数传入。泛型的。#ifndef mathOperator_h__#define mathOperator_h__#include "typeConvert.h"/********************************************************************Descr
2013-10-07 14:34:20 954
原创 1) 获取类型特征typeTraits [原创,泛型编程,自由下载转载,需注明出处]
由于在我们的项目中,不能使用std及其它的主流库(boost等),在需要判断一些类型特征及类型转换时,就只能自己写这些功能了。这面是这些功能的实现(当然boost实现得更好:如果你的项目中允许使用boost这种重量级的库时,那么还是推荐你使用boost,如果不能,那么这些源代码可供替代使用)#ifndef typeTrait_h__#define typeTrait_h__#i
2013-10-07 14:18:50 1142
原创 14) 常用的遍历/(条件)查找/收集数据/(拷贝2比较优先)排序算法algorithm [原创,泛型编程,自由下载转载,需注明出处]
下面的一套算法,配合前面提供的泛型库的支持部件,能够提供下列基于概念的功能:1.遍历处理2.统计计数3.查找4.最大/最小值5.收集 : 收集的结果可以是任何形式的:数组/容器,T/T*,并且调用接口是完全相同的(减轻用户负担),代码内部会自动进行类型识别。6.累加7.排序7.1) 用户可以指定执行方式是比较优先/拷贝优先/缺省自动 7.2) 按参照顺序排序
2013-10-07 14:13:17 1209
原创 13) 参数适配ParamterWrapper [原创,泛型编程,自由下载转载,需注明出处]
我们在写C++接口时,通常会有下列参数形式:1. T, T&以出于不同的需求,比如对于一些内置参数,由于其复制很高效,T及T&没有什么大的区别,我们就可以使用T形式;但是对于一些比较大的对象,如果用T,则传递过程中会构造临时对象出来,浪费效率;或者对于一些不可复制对象,使用T根本编译不过,就需要使用T&形式;对于一些C程序员2. 或者部分C++程序员来说,可能会使用T*形式,但是这样,就把
2013-10-07 13:52:58 960
原创 11) 为STL容器和数组提供统一的接口DataSet [原创,泛型编程,自由下载转载,需注明出处]
在一些产品上,对于数据块,有些人喜欢用数组,比较典型的C程序员,有些人喜欢用STL容器,对于框架操作,我们通常希望存取这些对象能够使用一套统一的接口去存取它,因为从概念上讲,它们无非就是一组数据的集合,我不关心存取它们方式的不同,只需要给我一个,存入一个数等。为了满足这些需求,下列源文件提供把C数组和STL容器做了统一的封装,以提供一样的接口。(没有提供查入/删除接口)#ifndef
2013-10-07 13:34:49 956
原创 9) 常用函数对象functionobject [原创,泛型编程,自由下载转载,需注明出处]
在使用STL算法时,第三个参数通常是一些函数对象。这样,我们为了使用STL提供的算法函数,就不得不提供一些零碎的,小的函数对象,有可能这些函数对象仅仅这只这一处使用,我们就不得不写这样一个函数对象类。大多数时候,这个函数对象提供的功能可能非常简单,比如说就是根据结构体里的某个子结构体的某个子成员值相比较,或者满足某种大小的需求,这类需求功能从概念上讲是一样的,但是实现起来,就不得不一一书写这些琐碎
2013-10-07 13:25:50 920
原创 12) 类型安全的任意类CAnyObject [原创,泛型编程,自由下载转载,需注明出处]
anyObject.h , 这是泛型库中13个源文件中的一个,不知道csdn有没有自动上传源代码的功能,有知道怎么用的朋友请告诉我一声。这个源文件可以封装任意类到一个共同的类中,不需要封装的类之间有任何联系,在具体应用时,down-cast时是类型安全的,并且不需要RTTI的支持。(有些开发环境为了提高运行速度,会把RTTI关掉的--这样大约有10%的性能提高)这个功能分两级实现的
2013-10-07 12:06:03 975
[原创]自己工作中常用的模板库,简化你的工作
2015-10-12
注册表搜索工具有跳转工具
2013-10-09
正则表达式系统教程及实用的参考例子
2010-08-25
window命令手册(chm)
2010-08-25
CppReference.chm
2010-08-25
修复VS2003安装时的缺失文件h2inc.err等问题。(h2inc.err下载)
2010-02-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人