- 作者:xiaoxiao
- 发表时间:2020-12-23 10:57
- 来源:未知
Andrei Alexandrescu and Petru Marginean
本文代码下载:ftp://ftp.cuj.com/pub/2003/2106/alexandr.zip
你知道,当一个概念从一个专有名词变成一个普通名词时,说明它真正的深入人心了。比如Kleenex(面巾纸品牌,也指面巾纸),Xerox(施乐,复印机品牌,也指复印机)Q-Tips(化妆品品牌,也指化妆包),对吗?所以说,当我听说你可以在Visual C++.NET中使用“modern C++ design”时非常高兴也就不奇怪了。这里指的是——至少我这样认为——《Modern C++ Design》[1]所推行的基于模板的技术。
在所有泛型<编程>系列文章中都有一个成功的要素,就是进行特有至通用的“文法升华。”比如,在ScopeGuard[2]中增加了放入“撤消”动作于正常执行路径而当一个复杂操作成功时解除“撤消”的常见技术之后,ScopeGuard就成为了“域守卫(scope guard)”。我大多数受欢迎的文章不完全由我完成,而是和Petru Marginean紧密合作的结果。而且让我更加高兴的是再一次在本文中与他合作。
上一次,我们讨论断言,一个强大的设计验证和调试机制。今天,我们将讨论断言对应于发布状态的机制:实施(enforcement),这是方便实用的快速条件验证机制。非常类似于ScopeGuard,ENFORCE宏极大程度地减少了你需要使用在错误处理上的代码。ScopeGuard和ENFORCE可相互独立工作,但最好是一起使用。ENFORCE是意外的源头,ScopeGuard是意外的传播者。
实施(Enforcements)
设想你注视着面前的一大堆代码。你知道你要在这些代码中杀出一条血路,你也知道你必须写更多的新代码。
一个好习惯是先浏览代码,试着找到一些通用模式。你要理解模式背后的概念。很有可能,所有这些都不是偶然发生的,而是同样的基本概念的不同表现形式,然后,你可以整理这些提取出的模式,这样你就可以扼要地表达所有的作为概念的实现体的模式
现在先暂停,看一下你要分析的不同模式的大小。如果这个模式很大,比如作为基础部分涉及到了整个程序,那么你正在和结构模式(architectural patterns)打交道。
如果模式是中等尺寸,横跨数个对象和/或函数,那么你遇到的是设计模式。
如果模式非常小,只包括3-10行代码,那么你面前的的常用法(idiom)。
最后,如果模式只有1-2行代码,你得到的东西叫做代码风格或格式。