请考虑以下状态图:

使用平面方案实现此状态图时,您期望将下列方法添加到类中,并通过从 rootState_dispatchEvent() 中进行一系列函数调用来调用这些方法:
int MyClass::s2TakeNull() {
int res = eventNotConsumed;
s2_exit();
//#[ transition 2
f2();
f2();
//#]
s3_entDef();
res = eventConsumed;
return res;
};
int MyClass::s1TakeNull() {
int res = eventNotConsumed;
s1_exit();
//#[ transition 1
f1();
f1();
//#]
s2_entDef();
res = eventConsumed;
return res;
};
发生的情况实际是,方括号 //#[ 与 //#] 之间的过渡代码立即直接插入(嵌入)到 rootState_dispatchEvent() 中,如下所示:
int MyClass::rootState_dispatchEvent(short id) {
int res = eventNotConsumed;
switch(rootState_active) {
case s1:
{
if(id == Null_id)
{
popNullConfig();
//#[ transition 1
f1();
f1();
//#]
pushNullConfig();
rootState_subState = s2;
rootState_active = s2;
res = eventConsumed;
}
break;
};
case s2:
{
if(id == Null_id)
{
popNullConfig();
//#[ transition 2
f2();
f2();
//#]
rootState_subState = s3;
rootState_active = s3;
res = eventConsumed;
}
break;
};
};
return res;
};
因为此代码通过直接插入代码减少了一些函数调用,因此更为高效。直接插入功能是通过类的 CG::Class::ComplexityForInlining 属性提供的,在缺省情况下,此属性设置为 3。这意味着,如果用户代码(过渡的动作部分)不足 3 行,那么它将直接插入(即嵌入)到函数调用位置,而不是进行函数调用。要获取“期望的”结果(而不进行直接插入),请将此属性设置为 0。