03 2013 档案

摘要:这几天用bind的时候想到一个问题,成员函数指针有多态的效果吗?我一直以为没有,测试之后发现是可以的,我对成员函数指针的理解有误虚成员函数指针的调用过程是先调用函数vcall,vcall根据this寻址虚函数表然后去调用实际的函数,对于虚表上的每个索引x的函数都是使用vcall{x}进行调用所以同一虚函数的父类和基类的成员函数指针的值是一样的,他们都指向vall{x}所以成员函数指针是能够实现多态的我在http://www.cnblogs.com/mightofcode/archive/2013/03/03/2939439.html里面关于成员函数指针的部分写的有点问题注意:这里说的是成员函数 阅读全文
posted @ 2013-03-31 15:52 mightofcode 阅读(324) 评论(0) 推荐(0)
摘要:c/c++的头文件是一种很落后的编译机制,大量程序员在这上面浪费了无数生命理论上,只要两个类之间不存在互相包含的关系,那么编辑就应该能通过但是头文件机制却给我们造成了无数的麻烦,因为我们还要避免头文件之间的互相包含比如现在有两个类A,B,分别在a.h b.h里面如果现在AB都要依赖对方,那么a.h,b.h互相包含肯定是不行的,这个时候只有使用前置声明,但是如果作为类成员使用了对方声明的一个struct呢?那么只好把这个共用的类提到另一个头文件c.h里面,大家再去包含c.h,这样就产生了一个新的文件但是如果有更多的类,更多的头文件呢?结果是文件越来越多,改动的代价也越来越大,不胜其烦这样当然也有 阅读全文
posted @ 2013-03-27 11:41 mightofcode 阅读(237) 评论(0) 推荐(0)
摘要:这是前几天跟一个同事合作的感慨宏:他写的代码用了一些很难看的宏,实际完成的却是很简单的功能,但是宏难以调试其实用模板也可以实现,而且好调试一点,当然这里最好还是写最直接的代码比较好无意义的封装:几个函数就能解决的问题,却用类封装了好几层,却由于对c++没有深刻理解,没有封装好,搞出bug来了,调试了7个小时,浪费了4个人总共4x7小时keep it simple,stupid,这是诸多unix哲学里面最好用的一条了,保持简单傻瓜,多快好省地写代码! 阅读全文
posted @ 2013-03-27 11:15 mightofcode 阅读(181) 评论(0) 推荐(0)
摘要:委托的核心就是封装类成员函数,使不同类的不同函数能够以一种统一的方式被调用这样进行回调的方式要比使用接口通知模型少写很多代码,避免了重复工作如果不使用c++11的新特性当然也能自己抡一个类似的轮子(而且还可以随意拓展)不过有现成没有理由不用function:函数对象,可以认为这个对应于c#中的委托,不过c++11没有提供事件的抽象,下面就要实现它bind:创建函数对象的工具下面的一个类实现了类似c#事件(在c++里面还是叫委托好了)的模板struct __ut_delegate_id{ template<typename T> friend class ut_delegate;pr 阅读全文
posted @ 2013-03-13 19:47 mightofcode 阅读(718) 评论(0) 推荐(0)
摘要:这几天被c++成员函数指针的问题搞得晕头转向下面来慢慢整理下c++对象内存布局与c++成员函数指针的知识c++对象内存布局1 成员函数如何实现的?跟普通函数了有什么区别? 成员函数需要传递this指针,以普通的成员函数为例:obj* oo1=new obj; oo1->foo();00FF9916 mov ecx,dword ptr [ebp-80h] //传递对象地址到ecx00FF9919 call obj::foo (0FF6108h) //调用函数foo()00FF9AFF pop ecx //00FF9B00 mov dw... 阅读全文
posted @ 2013-03-03 01:44 mightofcode 阅读(1068) 评论(0) 推荐(0)