生成标准操作的机制涉及:
在 site.prp 文件中,必须为每个标准操作提供一对类级属性。名称必须使用以下格式:
名称的“op1”部分是将要在 StandardOperations 属性中使用的字符串,用以参考此标准操作。
将在相应的 .h 文件中生成“声明”属性的内容。将在相应的 .c 或 .cpp 文件中生成“声明”属性的内容。
通常将在这些属性的值中使用一个或多个 IBM Rational Rhapsody 关键字。例如:
Subject CG
Metaclass Class
Property op1Declaration MultiLine "void $Name;"
Property op1Definition MultiLine "void $Name: $Name() {int x=7;}"
Property op2Declaration MultiLine "void $Name_serialize;"
Property op2Definition MultiLine "void $Name: $Name_serialize{}"
end
end
由于您可能要对正在定义的标准操作代码中包含类成员的处理,因此 Rational Rhapsody 提供了关键字,用于生成将重复类中每个属性、关系或操作的代码。
要定义涉及类中所有属性的代码,请:
要定义涉及类中所有关联的代码,请:
要定义涉及类中所有操作的代码,请:
还可定义用于重复类中每个参数的代码。其中包括了所有事件参数和类中包含的所有操作参数。
要定义涉及所有参数的代码,请:
定义模板类标准操作时,可使用关键字 $NameWithTemplateParams。如果已具有名为 ClassA 的类,且该类是模板类,那么将使用“ClassA<params>”替换此关键字。 如果该类不是模板类,那么将使用“ClassA”替换此关键字。 定义副本构造函数时,以下属性定义将演示此关键字的用途。
Subject CG
Metaclass Class
Property CopyCtorDeclaration MultiLine "$Name(const $NameWithTemplateParams & x);"
Property CopyCtorDefinition MultiLine "$NameWithTemplateParams::$Name(const $NameWithTemplateParams & x) { /* some code */ }"
end
属性 CG::Class::StandardOperations 使用以逗号分隔的操作参考列表,取决于 site.prp 文件中包含的属性名。
如果添加了名为 op1Declaration、op1Definition、op2Declaration 和 op2Definition 的类级属性,那么若把 op1 和 op2 指定为该类的 StandardOperations 属性值,则将为类生成两项标准操作。
此示例显示如何使用标准操作功能执行事件序列化。方法与执行非序列化类似。
要为给定包中的所有事件生成操作,请:
CG::Event::serializeDeclaration
public: strstream & serializer(strstream & theStrStream) const;
CG::Event::serializeDefinition
strstream & $Name::serialize(strstream & theStrStream) {
$Base
$Arguments
return theStrStream;
}
CG::Argument::serialize
theStrStream << $Name;
CG::Event::serializeBase
$Name::serialize(theStrStream);