关闭

[置顶] 15). 回调模板函数/回调模板成员函数,回调参数个数和类型不固定,消除类似代码

完整的源代码及用法测试代码可以在我的资源中去下载. C++语法不支持模板函数/模板成员函数作为回调函数,同时把运行期代码向编译期代码转换也只有switch...case或者if..else能够实现。 如果case比较多的时候,代码非常臃肿,而且类似的大片代码中,往往只有一个参数的不同,其它都是相同的。这对于用户来说,都是一个大量的重复性的hard-code性的负担,而且也容易导致出...
阅读(782) 评论(0)

[置顶] 8) 多级结构数据成员指针memberPtr [原创,泛型编程,自由下载转载,需注明出处]

在一些需求中,对结构体/类比较,计算,求和,测试的用例中,其往往是对结构/类中的某一个数据成员/数据成员的某个子成员/数据成员的...某个子成员进行比较,计算,求和,测试,这就对某类算法产生了一个需求:给定一个结构体,产生这个结构体的指定需求子成员(包括多级子成员)。比如:     struct S1     {         int m_s1;     };     stru...
阅读(612) 评论(0)

[置顶] 4) 将多元函数转换为一元函数unaryFunctionConverter [原创,泛型编程,自由下载转载,需注明出处]

在既有代码中编程时,如果想对一个数据集(容器/数组)中的所有元素进行处理时,其处理函数一般只能接受一个参数--数据集的数据类型,而既有的接口可能需要多个参数--数据集的数据类型只是这多个需求参数中的一个参数。在通常情况下,如果想使用标准算法中的forEach算法,则需要就此功能另外再写一个函数/函数对象以把额外的参数封装在函数内部,或者直接自己遍历这个数据集,把既有函数中的代码Ctrl+C/Ctr...
阅读(946) 评论(0)

[置顶] 2) 转换类型typeConvert [原创,泛型编程,自由下载转载,需注明出处]

这些基于typeTraits提供的一些类型转换功能,比如典型的if-else等等,判断两个类型是否相同,是否原始类型相同,,是否可转换,是否值可转换,是否基类派生类,是否序列类,是否数组,是否是原子类型,是否是内置类型,是否是枚举类型。 如果你的项目中允许使用boost这类重量级库的话,还是推荐你使用boost,下面的源代码提供了一个可供选择的替代方案:如果你不想引入boost这种巨无霸或者你的...
阅读(780) 评论(0)

[置顶] 10) 泛型工厂方法创建实例ClassRegister [原创,泛型编程,自由下载转载,需注明出处]

这个源文件的功能是实现像MFC的动态创建的效果。、 但是和MFC相比,这个功能有下列优势: 1.MFC的动态创建创建出来的类的基类必须是CObject的,这个源文件没有任意限制,因为这个源文件的实现是模板化的,这创建出来的对象的基类可以是任意类型的--取决于你给它的约定。 2.MFC的动态创建创建对象只能根据类型名字字符串,比较"CMyClass",而些功能源文件可以根据下列特征来创建。...
阅读(1011) 评论(0)

6) 创建一元函数/二元函数functionCreater [原创,泛型编程,自由下载转载,需注明出处]

这个文件是和将多元函数转换为一元函数unaryFunctionConverter配合使用的,unaryFunctionConverter提供了转换的实现,但是使用起来不便,此文件functionCreater将这些转换封装成了makeUnaryFunction/makeBinaryFunction以方便使用,使用者只需要提供函数指针及必要的传入参数即可创建正确的一元/二元函数对象、 #i...
阅读(627) 评论(0)

5) 函数特征functionTraits [原创,泛型编程,自由下载转载,需注明出处]

前面已经有了类型特征,用于判断一个类型的各种属性。 函数也是程序设计中的一个重要概念,因此判断一个函数的各种属性也很重要。 这些属性包括一个函数的: 返回值,参数个数,每个参数的类型 如果是成员函数,还应该包括对象的类型。 这个文件支持了查询函数属性的功能,但是最多只支持5个参数的函数(成员函数的对象类型除外) #ifndef functorTraits_h__ #defin...
阅读(580) 评论(0)

7) 占位符类型placeHolder [原创,泛型编程,自由下载转载,需注明出处]

要泛型设计中,某些类型或者值在编译阶段是无法确实的,但是又确实需要把这个位子给占住,在实际运行中,再用确切的类型/值来替换。 就好比一个人雇人排队买房:排队的是占位符,但是真正买房时,还是你自己去的。 下面实现了占位符功能,且最多支持5个占位符。 #ifndef placeHolder_h__ #define placeHolder_h__ #include #if...
阅读(515) 评论(0)

3) 一元/二元函数抽象function [原创,泛型编程,自由下载转载,需注明出处]

function/function object是运行时调用的基础,在模板中,最常用的函数是一元函数及二元函数。 通常一元函数R (*)(TP)是遍历的组件,如果R是bool类型或者进行二次封装(把R由非bool转换为bool),则一元函数R (*)(P)还可以成为测试组件,用于if的条件。 通常二元函数是R (*)(TP1,TP2)是比较/交换的组件,用于比较两个值,其用于if的条件,或者用...
阅读(729) 评论(0)

这是vs2008编译器的一个bug么?

在vs2008中测试如下代码: struct tagS{}; bool  VSBug(tagS const& l, const tagS r) {     return true; } template void showType(T f) {     cout } void main()   {      showType(VSBug); ...
阅读(564) 评论(0)

把一个非延缓评估的元函数转换为一个延缓评估的元函数(Lazy evaluation)

在C++的模板元编程中,如果使用了T::type , T::value , T::apply之类的语法,其将导致编译器立马对该类型表达式进行求值,有些时候,这些求值工作是不必要的,将增加编译器的编译时间,我们可以将之延迟到最后一刻确实需要进行类型计算的时候再去求值,此称之为Lazy evaluation。 下面通过Lazy_If_T 为例演示了如何把一个非延缓评估的元函数转换为延迟评估的元函数-...
阅读(629) 评论(0)

产生及判断NaN及INFINITE数值

本人工作中经常需要用到NaN及Inf浮点数,原来使用是IBM公司封装的CDecfloat数据类型,后来发现这个数据类型的许多缺点: 1. 数据类型size太大,浪费内存:这个数据类型用来表示浮点数,在x86 32位机器上竟然需要100多个字节。 (浮点数只需要4字节啊,IBM的大神们) 2.   操作效率低下,来回和string相倒换,有时候完全没有必要。 3. rescale后,原有的数值...
阅读(6663) 评论(0)

胡思乱想:C程序员,C++程序员,java程序员都在追求什么

如果走技术路线的话,那么C程序员,C++程序员,java程序员都在实践中追求什么呢??在保证正确性的大前提下,胡思乱想了一点儿,感觉如下: 1。C程序员 : 玩算法,追求高效率,宜用于底层。 2。C++程序员 : 兼顾效率,追求通用性及灵活性,宜用于做构架框架。 3。java程序员:追求语法简单,语言本身封装了很多应用层的东西,易于上手,适宜于新手及快速开发。 C语言是C++语言的...
阅读(796) 评论(0)

避免创建不必要的大对象(把大对象转换为小对象)

在模板函数中,很多情况下,我们仅仅需要一个对象的类型,而并不需要这个对象的实体,例如:  templatetypenameT> void HandObject() {                 cout typeid(T).name() <(); 很多时候,用户并不喜欢这...
阅读(630) 评论(0)

开始学习java

公司项目转Android/java方向,现在开始学习java,哎,十几年的C/C++经验怕要浪费了。 开始看java简明教程,感觉java把C++阉割得一塌糊涂,强大的特性全部删除掉了。 个人感觉,java的做法就是把C++的一些高级特性给封装了,然后把开发者可以自由发挥的高级语法给阉割掉了,这样用户只能使用java封装后的东西。 而且听人介绍的java中比较牛的特征后,感觉这些特性都可以用...
阅读(536) 评论(0)

反转单向链表的实现

单向链接的反转往往会拿来考验人的基本逻辑,因为其中几个变量的初始化和更新稍微考虑疏漏一点儿就出错。 下面的算法提供了一个简洁的实现,不用再考虑那几个变量的初始化及更新了。 //反转单向链表的实现。 template T* reverseSingleList(T* pHead, T* T::*pNext,T*& pNewHead) {                       if (...
阅读(735) 评论(0)

左移/右移指定位数字符串 (算法http://blog.csdn.net/v_JULY_v/article/details/6322882 的实现)

以下内容来自于http://blog.csdn.net/v_JULY_v/article/details/6322882 v_JULY_v博主提供了非常精妙的算法原理,佩服。但是我个人觉得算法的实现稍显麻烦,看那些算法的实现看得很头疼。 我依据博主的算法,写出了下面的实现。 实现原理:同博主所言,所谓的字符串左移/右移,就是交换字符串的两部分而已。 所以下面的算法实现中,除了最终的一次...
阅读(1377) 评论(0)
32条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:33641次
    • 积分:859
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    最新评论