文件名称:层次式状态机的类-《中国2060年前碳中和研究报告》
文件大小:4.49MB
文件格式:PDF
更新时间:2024-06-28 01:03:10
UML 状态图 实用C设计 实用C++设计 中文全文
次式状态处理函数的结构和清单 4.4 里的 C 版本是一样的。唯一有趣的差别是在清单 4.5(1) 里通用事 件指针到特定子类的向下转换。这里,我使用了新型的 static_cast< > 操作符,因为在类型之间的转换和 继承有关。当然,你也可以继续使用 C风格的转换,如果你的 C++ 编译器不支持这个新型转换。 C++ 里指向成员函数的指针 C++ 状态处理函数使用 me 指针本身的类的类型,通过它访问状态机数据成员和成员函数(如 me- >operand1 = …)。这是因为状态处理函数是 QHsm 子类的静态成员。,比如计算器状态机类 Calc(见 4.6.3节)。 一个明显并更优雅的方法是把状态处理函数变成规范的非静态类成员,这允许它们通过内含的 this 指针 更加自然地访问类成员。 实际上这个更加优雅的方法在本书第一版时被用于较早版本的 QEP/C++上。然而,这个方法需要使用执 行成员函数的指针,而不是简单的指向函数的指针,这在实际应用中是一个问题。 即使早期的 C++ 版本的 QEP用很标准的方法来使用指向成员函数的指针,实际开发过程中,嵌入式开 发者反应大量的编译警告,而且这种优雅的方法要不就是很低的性能,要不就是完全不工作。例如,一 些嵌入式 C++ 编译器使用超过 30条机器指令去反引用一个指向成员函数的指针,而反引用一个规范的 指向函数的指针仅需 3 条机器指针。无需多言, 3 条机器指令足够完成这项工作了。(见 3.7.1节)。 根据目前情况,太多的 C++ 编译器因为受其他语言特征比如多重继承和虚拟基础类的影响,不能很好 支持指向成员函数的指针。这点已由在线文档“成员函数指针和可能最快的 C++委派“雄辩的指出 [Clugston 07] ,甚至非常流行和重要的框架如 MFC实际上用一种打破正常的 C++ 类型检查的非标准 方法来使用指向成员函数的指针。 为避免低效和移植性问题,当前的 C++ 版本的 QEP不使用指向成员函数的指针,而是简单明了的指向 函数的指针,指向静态成员函数但是不用 this 指针,这样就不会被多态性或多重继承影响。请注意静态 类成员需要的内含的 me 指针的作用相当于面向对象的状态设计模式所需要的 context指针(见第三 章 3.5.1节)。 4.5 层次式状态机的类 如图 4.1 所示, QHsm 基础类是 QEP设计的核心要素。 QHsm 类是抽象的,意味着它不是用来直接 保留中文简体翻译的全部版权 anymcu@gmail.com 2010 125