C++
文章平均质量分 79
gaojl0728
心存高远,追求卓越。
展开
-
用C++模拟C#事件机制
C#中的事件机制可以很方便的实现设计模式中的Observer模式,C#提供了delegate 和 event 来实现这种机制,实际上只要delagate就可以实现event效果,event语法完全没必要,因为delegate是多播的。本文提供了一个C++版本的实现,与C#原生的事件机制相比,只有一点不同,我实现的delegate是单播的(为了避免delegate 和 event 功能重复的原创 2008-11-24 17:04:00 · 990 阅读 · 0 评论 -
使用C++模板封装SQLite(完整版)
SQLite 是一款开源的嵌入式数据库,由于本身小巧玲珑,比较适合作为应用软件的一部分嵌入到程序中,SQLite提供了一套简单易用的C API供应用程序调用, 但由于API的使用比较繁杂,并且考虑到将来移植到不同数据库的需求,应当避免直接使用SQLite API,应对其适当的封装,增加代码的灵活性。本文就项目中的使用经验提供了一种封装的方法。 1.API层的封装 由于原创 2008-11-24 18:36:00 · 7967 阅读 · 13 评论 -
C++语言中的闭包
在大多数函数式语言中,不允许函数有副作用,即函数不能访问或改变外部状态(比如全局变量),这样做极大方便了单元测试和bug 定位以及并发,但是在一些函数式语言中对函数副作用的要求稍稍放宽了限制,引入了词法闭包(lexical closure),允许函数可以保留自己的context, 以便设计出传出值是函数的函数。例如: erlang中这样实现闭包, MakeTest =原创 2008-12-10 09:59:00 · 7261 阅读 · 2 评论 -
用C++模拟C#事件机制之改进篇
我前面写过的一篇 C++模拟C#事件机制 中给出了一个C++ event完整实现, 但是存在好多问题,主要是:由于使用静态变量存储函数类别导致不能保存多个相同函数特征(参数列表和返回值)的函数。这个重构版本充分利用了面向对象的思想,利用派生和多态封装了全局函数,成员函数,函数对象,使3者借口完全一致. templateclass TReturn, class TArgumen原创 2008-12-10 13:11:00 · 1049 阅读 · 0 评论 -
使用设计模式实现Undo,Redo框架
编辑器程序少不了要支持undo, redo功能,如何实现?本文就是参考了设计模式中给出的思路实现了一个。这里主要用到了两个模式:命令(command)模式, 备忘录(memento)模式所谓编辑,功能上可以分成3个原子操作:添加新内容,编辑已有内容,删除已有内容, 因此编辑功能3个command实现,AddCommand, EditCommand, DeleteCommand. 这3个命令原创 2008-12-10 13:38:00 · 3908 阅读 · 0 评论