摘要://///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// thursday, april 08, 2004......
摘要: 总结一些管理心得、经验与想法,写出来,便于解决问题或日常检视公司运行状况的时候看看。 一、动态平衡与发展 公司创办的热情、首轮机会过去后,面对经营中不断出现的诸多问题,经营者的想法会发生很多变化,会发现可以导致公司走向衰落甚至垮掉的因素非常多而且问题不断出现。 公司的运行是很多环节的协同运行,概括起来说,就是在现有的政策法律的规范下,协调合伙人或投资人与经营者关系,运作资金,了解消......
成员函数指针与高性能的C++委托(下篇) 成员函数指针与高性能的c++委托(下篇) 【程序编程相关:
【原创】ClassLoader是何物,有】 member function pointers and the fastest possible c++ delegates 【推荐阅读:
关于脚本中注释的五点建议】 翻译:周翔 【扩展信息:
为你的 Blog 添加“天气预报”功能。】 撰文:don clugston (接中篇) 委托(delegate) 与成员函数指针不同,你不难发现委托的用处.最重要的,使用委托可以很容易地实现一个subject/observer设计模式的改进版[gof, p. 293].observer(观察者)模式显然在gui中有很多的应用,但我发现它对应用程序核心的设计也有很大的作用.委托也可用来实现策略(strategy)[gof, p. 315]与状态(state)[gof, p. 305]模式. 现在,我来说明一个事实,委托与成员函数指针相比并不仅仅是好用,而且比成员函数指针简单得多!既然所有的.net语言都实现了委托,你可能会猜想如此高层的概念在汇编代码中并不好实现.但事实并不是这样:委托的实现确实是一个底层的概念,而且就像普通的函数调用一样简单(并且很高效).一个c++委托只需要包含一个this指针与一个简单的函数指针就够了.当你建立一个委托时,你提供这个委托一个this指针,并向它指明需要调用哪一个函数.编译器可以在建立委托时计算出调整this指针需要的偏移量.这样在使用委托的时候,编译器就什么事情都不用做了.这一点更好的是,编译器可以在编译时就可以完成全部这些工作,这样的话,委托的处理对编译器来说可以说是微不足道的工作了.在x86系统下将委托处理成的汇编代码就应该是这么简单: mov ecx, [this] call [pfunc] 但是,在标准c++中却不能生成如此高效的代码. borland为了解决委托的问题在它的c++编译器中加入了一个新的关键字(__closure),用来通过简洁的语法生成优化的代码.gnu编译器也对语言进行了扩展,但与borland的编译器不兼容.如果你使用了这两种语言扩展中的一种,你就会限制自己只使用一个厂家的编译器.而如果你仍然遵循标准c++的规则,你仍然可以实现委托,但实现的委托就不会是那么高效了. 有趣的是,在c#与其他.net语言中,执行一个委托的时间要比一个函数调用慢8倍(参见http://msdn.microsoft.com/library/en-us/dndotnet/html/fastmanagedcode.asp).我猜测这可能是垃圾收集与.net安全检查的需要.最近,微软将“统一事件模型(unified event model)”加入到visual c++中,随着这个模型的加入,增加了__event. __raise.__hook.__unhook.event_source与event_receiver等一些关键字.坦白地说,我对加入的这些特性很反感,因为这是完全不符合标准的,这些语法是丑陋的,因为它们使这种c++不像c++,并且会生成一堆执行效率极低的代码. 解决这个问题的推动力:对高效委托(fast delegate)的迫切需求 使用标准c++实现委托有一个过度臃肿的症状.大多数的实现方法使用的是同一种思路.这些方法的基本观点是将成员函数指针看成委托��但这样的指针只能被一个单独的类使用.为了避免这种局限,你需要间接地使用另一种思路:你可以使用模版为每一个类建立一个“成员函数调用器(member function invoker)”.委托包含了this指针与一个指向调用器(invoker)的指针,并且需要在堆上为成员函数调用器分配空间. 对于这种方案已经有很多种实现,包括在codeproject上的实现方案....
下一页 摘要: 当你开始一个复杂项目时,不管大小,你必须首先创建一个适应最终产品和环境的高水平的设计或者体系结构。这种体系结构作为行动指南,指引开发者如何让各部分和组建交互和协作。项目启动并不是你想象的那么难。但是,有一些事情需要考虑并且达成共识。在开发商业智能和管理系统时,我发现了4个重要的成功因素:可靠的体系结构 首先我很希望阐述需要体系结构指南,这是让人感到满意的一个成功因素。我们发现多年来企业信息工厂(......